mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-29 08:01:23 +03:00
Check in some changes to fuzz.test. Still failing. (CVS 3985)
FossilOrigin-Name: 6f346a6be9803b84260509352315f8fa1e820490
This commit is contained in:
14
manifest
14
manifest
@ -1,5 +1,5 @@
|
|||||||
C Avoid\smultiple\sstorage\sclass\sspecifiers\s("static\sextern")\sin\sthe\samalagmation.\s(CVS\s3984)
|
C Check\sin\ssome\schanges\sto\sfuzz.test.\sStill\sfailing.\s(CVS\s3985)
|
||||||
D 2007-05-11T12:30:04
|
D 2007-05-11T16:58:04
|
||||||
F Makefile.in 87b200ad9970907f76df734d29dff3d294c10935
|
F Makefile.in 87b200ad9970907f76df734d29dff3d294c10935
|
||||||
F Makefile.linux-gcc 2d8574d1ba75f129aba2019f0b959db380a90935
|
F Makefile.linux-gcc 2d8574d1ba75f129aba2019f0b959db380a90935
|
||||||
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
|
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
|
||||||
@ -248,7 +248,7 @@ F test/fts2l.test 4c53c89ce3919003765ff4fd8d98ecf724d97dd3
|
|||||||
F test/fts2m.test 4b30142ead6f3ed076e880a2a464064c5ad58c51
|
F test/fts2m.test 4b30142ead6f3ed076e880a2a464064c5ad58c51
|
||||||
F test/fts2n.test a70357e72742681eaebfdbe9007b87ff3b771638
|
F test/fts2n.test a70357e72742681eaebfdbe9007b87ff3b771638
|
||||||
F test/func.test bf30bac1c5ce10448ab739994268cf18f8b3fa30
|
F test/func.test bf30bac1c5ce10448ab739994268cf18f8b3fa30
|
||||||
F test/fuzz.test e939852bfd1d2db7264d6a55ed9b17834a535728
|
F test/fuzz.test 5bd59290ab42cabbfb2e0ad1683a480f0d8e8693
|
||||||
F test/fuzz2.test fdbea571808441c12c91e9cd038eb77b4692d42b
|
F test/fuzz2.test fdbea571808441c12c91e9cd038eb77b4692d42b
|
||||||
F test/hook.test 7e7645fd9a033f79cce8fdff151e32715e7ec50a
|
F test/hook.test 7e7645fd9a033f79cce8fdff151e32715e7ec50a
|
||||||
F test/icu.test e6bfae7f625c88fd14df6f540fe835bdfc1e4329
|
F test/icu.test e6bfae7f625c88fd14df6f540fe835bdfc1e4329
|
||||||
@ -488,7 +488,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9
|
|||||||
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
|
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
|
||||||
F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
|
F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
|
||||||
F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
|
F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
|
||||||
P 4e1bb41f302c13095aa9c638e59ae11417f49682
|
P 2f70159b1d6ded4a1ac446faa3baf7269f37703f
|
||||||
R 0ef77c803856268fd492e9a8b4d88856
|
R 0b013336ad3732dc516052d4aa155e80
|
||||||
U drh
|
U danielk1977
|
||||||
Z 29baa4cb103abeeafa2097c522aa6ac6
|
Z 5241c0f63790746ffd570aebaabc6267
|
||||||
|
@ -1 +1 @@
|
|||||||
2f70159b1d6ded4a1ac446faa3baf7269f37703f
|
6f346a6be9803b84260509352315f8fa1e820490
|
@ -13,11 +13,14 @@
|
|||||||
# (a.k.a. "fuzz") and sending it into the parser to try to generate
|
# (a.k.a. "fuzz") and sending it into the parser to try to generate
|
||||||
# errors.
|
# errors.
|
||||||
#
|
#
|
||||||
# $Id: fuzz.test,v 1.6 2007/05/11 10:10:33 danielk1977 Exp $
|
# $Id: fuzz.test,v 1.7 2007/05/11 16:58:04 danielk1977 Exp $
|
||||||
|
|
||||||
set testdir [file dirname $argv0]
|
set testdir [file dirname $argv0]
|
||||||
source $testdir/tester.tcl
|
source $testdir/tester.tcl
|
||||||
|
|
||||||
|
set ::REPEATS 20
|
||||||
|
set ::REPEATS 5000
|
||||||
|
|
||||||
proc fuzz {TemplateList} {
|
proc fuzz {TemplateList} {
|
||||||
set n [llength $TemplateList]
|
set n [llength $TemplateList]
|
||||||
set i [expr {int(rand()*$n)}]
|
set i [expr {int(rand()*$n)}]
|
||||||
@ -74,7 +77,7 @@ proc Expr { {c {}} } {
|
|||||||
incr ::ExprDepth
|
incr ::ExprDepth
|
||||||
|
|
||||||
set TemplateList [concat $c {[Literal]}]
|
set TemplateList [concat $c {[Literal]}]
|
||||||
if {$::ExprDepth < 25} {
|
if {$::ExprDepth < 5} {
|
||||||
lappend TemplateList \
|
lappend TemplateList \
|
||||||
{[Expr $c] [BinaryOp] [Expr $c]} \
|
{[Expr $c] [BinaryOp] [Expr $c]} \
|
||||||
{[UnaryOp] [Expr $c]} \
|
{[UnaryOp] [Expr $c]} \
|
||||||
@ -84,6 +87,17 @@ proc Expr { {c {}} } {
|
|||||||
{CAST([Expr $c] AS text)} \
|
{CAST([Expr $c] AS text)} \
|
||||||
{CAST([Expr $c] AS integer)} \
|
{CAST([Expr $c] AS integer)} \
|
||||||
{CAST([Expr $c] AS real)} \
|
{CAST([Expr $c] AS real)} \
|
||||||
|
{abs([Expr])} \
|
||||||
|
{coalesce([Expr], [Expr])} \
|
||||||
|
{hex([Expr])} \
|
||||||
|
{length([Expr])} \
|
||||||
|
{lower([Expr])} \
|
||||||
|
{upper([Expr])} \
|
||||||
|
{quote([Expr])} \
|
||||||
|
{random()} \
|
||||||
|
{randomblob(min(max([Expr],1), 500))} \
|
||||||
|
{typeof([Expr])} \
|
||||||
|
{substr([Expr],[Expr],[Expr])} \
|
||||||
{CASE WHEN [Expr $c] THEN [Expr $c] ELSE [Expr $c] END} \
|
{CASE WHEN [Expr $c] THEN [Expr $c] ELSE [Expr $c] END} \
|
||||||
{[Literal]} {[Literal]} {[Literal]}
|
{[Literal]} {[Literal]} {[Literal]}
|
||||||
}
|
}
|
||||||
@ -110,6 +124,7 @@ proc Table {} {
|
|||||||
# Return a SELECT statement.
|
# Return a SELECT statement.
|
||||||
#
|
#
|
||||||
set ::SelectDepth 0
|
set ::SelectDepth 0
|
||||||
|
set ::ColumnList [list]
|
||||||
proc Select {{isExpr 0}} {
|
proc Select {{isExpr 0}} {
|
||||||
incr ::SelectDepth
|
incr ::SelectDepth
|
||||||
set TemplateList {
|
set TemplateList {
|
||||||
@ -119,14 +134,15 @@ proc Select {{isExpr 0}} {
|
|||||||
if {$::SelectDepth < 5} {
|
if {$::SelectDepth < 5} {
|
||||||
lappend TemplateList \
|
lappend TemplateList \
|
||||||
{SELECT [Expr] FROM ([Select])} \
|
{SELECT [Expr] FROM ([Select])} \
|
||||||
{SELECT [Expr] FROM [Table]} \
|
{SELECT [Expr $::ColumnList] FROM [Table]} \
|
||||||
|
|
||||||
if {0 == $isExpr} {
|
if {0 == $isExpr} {
|
||||||
lappend TemplateList \
|
lappend TemplateList \
|
||||||
{SELECT [Expr], [Expr] FROM ([Select]) ORDER BY [Expr]} \
|
{SELECT [Expr], [Expr] FROM ([Select]) ORDER BY [Expr]} \
|
||||||
{SELECT * FROM ([Select]) ORDER BY [Expr]} \
|
{SELECT * FROM ([Select]) ORDER BY [Expr]} \
|
||||||
{SELECT * FROM [Table]} \
|
{SELECT * FROM [Table]} \
|
||||||
{SELECT * FROM [Table] WHERE [Expr]} \
|
{SELECT * FROM [Table] WHERE [Expr $::ColumnList]} \
|
||||||
|
{SELECT * FROM [Table],[Table] AS t2 WHERE [Expr $::ColumnList] LIMIT 1}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
set res [fuzz $TemplateList]
|
set res [fuzz $TemplateList]
|
||||||
@ -145,6 +161,38 @@ proc Insert {} {
|
|||||||
fuzz $TemplateList
|
fuzz $TemplateList
|
||||||
}
|
}
|
||||||
|
|
||||||
|
proc Column {} {
|
||||||
|
fuzz $::ColumnList
|
||||||
|
}
|
||||||
|
|
||||||
|
# Generate and return a fuzzy UPDATE statement.
|
||||||
|
#
|
||||||
|
proc Update {} {
|
||||||
|
set TemplateList {
|
||||||
|
{UPDATE [Table]
|
||||||
|
SET [Column] = [Expr $::ColumnList]
|
||||||
|
WHERE [Expr $::ColumnList]}
|
||||||
|
}
|
||||||
|
fuzz $TemplateList
|
||||||
|
}
|
||||||
|
|
||||||
|
proc Delete {} {
|
||||||
|
set TemplateList {
|
||||||
|
{DELETE FROM [Table] WHERE [Expr $::ColumnList]}
|
||||||
|
}
|
||||||
|
fuzz $TemplateList
|
||||||
|
}
|
||||||
|
|
||||||
|
proc Statement {} {
|
||||||
|
set TemplateList {
|
||||||
|
{[Update]}
|
||||||
|
{[Insert]}
|
||||||
|
{[Select]}
|
||||||
|
{[Delete]}
|
||||||
|
}
|
||||||
|
fuzz $TemplateList
|
||||||
|
}
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
|
|
||||||
set ::log [open fuzzy.log w]
|
set ::log [open fuzzy.log w]
|
||||||
@ -160,7 +208,7 @@ proc do_fuzzy_test {testname args} {
|
|||||||
array set ::fuzzyopts $args
|
array set ::fuzzyopts $args
|
||||||
lappend ::fuzzyopts(-errorlist) {parser stack overflow} {ORDER BY column}
|
lappend ::fuzzyopts(-errorlist) {parser stack overflow} {ORDER BY column}
|
||||||
|
|
||||||
for {set ii 0} {$ii < 2000} {incr ii} {
|
for {set ii 0} {$ii < $::REPEATS} {incr ii} {
|
||||||
do_test ${testname}.$ii {
|
do_test ${testname}.$ii {
|
||||||
set ::sql [subst $::fuzzyopts(-template)]
|
set ::sql [subst $::fuzzyopts(-template)]
|
||||||
puts $::log $::sql
|
puts $::log $::sql
|
||||||
@ -231,11 +279,29 @@ do_test fuzz-1.7 {
|
|||||||
} [execsql {SELECT zeroblob(1000)}]
|
} [execsql {SELECT zeroblob(1000)}]
|
||||||
|
|
||||||
do_test fuzz-1.8 {
|
do_test fuzz-1.8 {
|
||||||
|
# Problems with opcode OP_ToText (did not account for MEM_Zero).
|
||||||
|
# Also MemExpandBlob() was marking expanded blobs as nul-terminated.
|
||||||
|
# They are not.
|
||||||
execsql {
|
execsql {
|
||||||
SELECT CAST(zeroblob(1000) AS text);
|
SELECT CAST(zeroblob(1000) AS text);
|
||||||
}
|
}
|
||||||
} {{}}
|
} {{}}
|
||||||
|
|
||||||
|
do_test fuzz-1.9 {
|
||||||
|
# This was causing a NULL pointer dereference of Expr.pList.
|
||||||
|
execsql {
|
||||||
|
SELECT 1 FROM (SELECT * FROM sqlite_master WHERE random())
|
||||||
|
}
|
||||||
|
} {}
|
||||||
|
|
||||||
|
do_test fuzz-1.10 {
|
||||||
|
# Bug in calculation of Parse.ckOffset causing an assert()
|
||||||
|
# to fail. Probably harmless.
|
||||||
|
execsql {
|
||||||
|
SELECT coalesce(1, substr( 1, 2, length('in' IN (SELECT 1))))
|
||||||
|
}
|
||||||
|
} {1}
|
||||||
|
|
||||||
#----------------------------------------------------------------
|
#----------------------------------------------------------------
|
||||||
# Test some fuzzily generated expressions.
|
# Test some fuzzily generated expressions.
|
||||||
#
|
#
|
||||||
@ -249,7 +315,6 @@ do_test fuzz-3.1 {
|
|||||||
}
|
}
|
||||||
} {}
|
} {}
|
||||||
set ::TableList [list abc def ghi]
|
set ::TableList [list abc def ghi]
|
||||||
set ::ColumnList [list a b c]
|
|
||||||
|
|
||||||
#----------------------------------------------------------------
|
#----------------------------------------------------------------
|
||||||
# Test some fuzzily generated SELECT statements.
|
# Test some fuzzily generated SELECT statements.
|
||||||
@ -287,7 +352,23 @@ integrity_check fuzz-5.2.integrity
|
|||||||
do_test fuzz-5.3 {execsql COMMIT} {}
|
do_test fuzz-5.3 {execsql COMMIT} {}
|
||||||
integrity_check fuzz-5.4.integrity
|
integrity_check fuzz-5.4.integrity
|
||||||
|
|
||||||
do_fuzzy_test fuzz-6.1 -template {[Select]}
|
#----------------------------------------------------------------
|
||||||
|
# Now that there is data in the datbase, run some more SELECT
|
||||||
|
# statements
|
||||||
|
#
|
||||||
|
set ::ColumnList [list a b c]
|
||||||
|
set E {{no such col} {ambiguous column name}}
|
||||||
|
do_fuzzy_test fuzz-6.1 -template {[Select]} -errorlist $E
|
||||||
|
|
||||||
|
#----------------------------------------------------------------
|
||||||
|
# Run some SELECTs, INSERTs, UPDATEs and DELETEs in a transaction.
|
||||||
|
#
|
||||||
|
set E {{no such col} {ambiguous column name} {table}}
|
||||||
|
do_test fuzz-7.1 {execsql BEGIN} {}
|
||||||
|
do_fuzzy_test fuzz-7.2 -template {[Statement]} -errorlist $E
|
||||||
|
integrity_check fuzz-7.3.integrity
|
||||||
|
do_test fuzz-7.4 {execsql COMMIT} {}
|
||||||
|
integrity_check fuzz-7.5.integrity
|
||||||
|
|
||||||
close $::log
|
close $::log
|
||||||
finish_test
|
finish_test
|
||||||
|
Reference in New Issue
Block a user