Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Additional test cases and requirements marks for the unlikely(), likelihood() and instr() functions. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
5f01cd36ee8678a07b79f9e01855daff |
User & Date: | drh 2013-10-11 16:35:49.710 |
Context
2013-10-11
| ||
20:14 | Add requirements marks. No code changes. (check-in: 5e0d43ab55 user: drh tags: trunk) | |
16:35 | Additional test cases and requirements marks for the unlikely(), likelihood() and instr() functions. (check-in: 5f01cd36ee user: drh tags: trunk) | |
15:05 | Fix various harmless compiler warnings. Change the "warnings.sh" script to work with STAT4 instead of STAT3. (check-in: 7df06684ab user: drh tags: trunk) | |
Changes
Changes to src/resolve.c.
︙ | ︙ | |||
703 704 705 706 707 708 709 710 711 712 713 714 715 716 | pExpr->iTable = exprProbability(pList->a[1].pExpr); if( pExpr->iTable<0 ){ sqlite3ErrorMsg(pParse, "second argument to likelihood() must be a " "constant between 0.0 and 1.0"); pNC->nErr++; } }else{ pExpr->iTable = 62; /* TUNING: Default 2nd arg to unlikely() is 0.0625 */ } } } #ifndef SQLITE_OMIT_AUTHORIZATION if( pDef ){ auth = sqlite3AuthCheck(pParse, SQLITE_FUNCTION, 0, pDef->zName, 0); | > > > > | 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 | pExpr->iTable = exprProbability(pList->a[1].pExpr); if( pExpr->iTable<0 ){ sqlite3ErrorMsg(pParse, "second argument to likelihood() must be a " "constant between 0.0 and 1.0"); pNC->nErr++; } }else{ /* EVIDENCE-OF: R-61304-29449 The unlikely(X) function is equivalent to ** likelihood(X, 0.0625). ** EVIDENCE-OF: R-35738-39582 The unlikely(X) fucntion is short-hand for ** likelihood(X,0.0625). */ pExpr->iTable = 62; /* TUNING: Default 2nd arg to unlikely() is 0.0625 */ } } } #ifndef SQLITE_OMIT_AUTHORIZATION if( pDef ){ auth = sqlite3AuthCheck(pParse, SQLITE_FUNCTION, 0, pDef->zName, 0); |
︙ | ︙ |
Changes to src/shell.c.
︙ | ︙ | |||
1200 1201 1202 1203 1204 1205 1206 | for(i=0; i<nCol; i++){ azCols[i] = (char *)sqlite3_column_name(pStmt, i); } do{ /* extract the data and data types */ for(i=0; i<nCol; i++){ aiTypes[i] = x = sqlite3_column_type(pStmt, i); | | | 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 | for(i=0; i<nCol; i++){ azCols[i] = (char *)sqlite3_column_name(pStmt, i); } do{ /* extract the data and data types */ for(i=0; i<nCol; i++){ aiTypes[i] = x = sqlite3_column_type(pStmt, i); if( x==SQLITE_BLOB && pArg && pArg->mode==MODE_Insert ){ azVals[i] = ""; }else{ azVals[i] = (char*)sqlite3_column_text(pStmt, i); } if( !azVals[i] && (aiTypes[i]!=SQLITE_NULL) ){ rc = SQLITE_NOMEM; break; /* from for */ |
︙ | ︙ |
Changes to test/func.test.
︙ | ︙ | |||
1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 | } {1000009} do_test func-29.6 { set x [lindex [sqlite3_db_status db CACHE_MISS 1] 1] if {$x<5} {set x 1} set x } {1} do_execsql_test func-30.1 {SELECT unicode('$');} 36 do_execsql_test func-30.2 [subst {SELECT unicode('\u00A2');}] 162 do_execsql_test func-30.3 [subst {SELECT unicode('\u20AC');}] 8364 do_execsql_test func-30.4 {SELECT char(36,162,8364);} [subst {$\u00A2\u20AC}] for {set i 1} {$i<0xd800} {incr i 13} { do_execsql_test func-30.5.$i {SELECT unicode(char($i))} $i | > > > > > > > > | 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 | } {1000009} do_test func-29.6 { set x [lindex [sqlite3_db_status db CACHE_MISS 1] 1] if {$x<5} {set x 1} set x } {1} # EVIDENCE-OF: R-29701-50711 The unicode(X) function returns the numeric # unicode code point corresponding to the first character of the string # X. # # EVIDENCE-OF: R-55469-62130 The char(X1,X2,...,XN) function returns a # string composed of characters having the unicode code point values of # integers X1 through XN, respectively. # do_execsql_test func-30.1 {SELECT unicode('$');} 36 do_execsql_test func-30.2 [subst {SELECT unicode('\u00A2');}] 162 do_execsql_test func-30.3 [subst {SELECT unicode('\u20AC');}] 8364 do_execsql_test func-30.4 {SELECT char(36,162,8364);} [subst {$\u00A2\u20AC}] for {set i 1} {$i<0xd800} {incr i 13} { do_execsql_test func-30.5.$i {SELECT unicode(char($i))} $i |
︙ | ︙ |
Changes to test/func3.test.
︙ | ︙ | |||
65 66 67 68 69 70 71 72 73 | set destroyed 0 set rc [catch { sqlite3_create_function_v2 db f3 -1 any -func f3 -step f3 -destroy destroy } msg] list $rc $msg } {1 SQLITE_MISUSE} do_test func3-4.2 { set destroyed } 1 finish_test | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | set destroyed 0 set rc [catch { sqlite3_create_function_v2 db f3 -1 any -func f3 -step f3 -destroy destroy } msg] list $rc $msg } {1 SQLITE_MISUSE} do_test func3-4.2 { set destroyed } 1 # EVIDENCE-OF: R-41921-05214 The likelihood(X,Y) function returns # argument X unchanged. # do_execsql_test func3-5.1 { SELECT likelihood(9223372036854775807, 0.5); } {9223372036854775807} do_execsql_test func3-5.2 { SELECT likelihood(-9223372036854775808, 0.5); } {-9223372036854775808} do_execsql_test func3-5.3 { SELECT likelihood(14.125, 0.5); } {14.125} do_execsql_test func3-5.4 { SELECT likelihood(NULL, 0.5); } {{}} do_execsql_test func3-5.5 { SELECT likelihood('test-string', 0.5); } {test-string} do_execsql_test func3-5.6 { SELECT quote(likelihood(x'010203000405', 0.5)); } {X'010203000405'} # EVIDENCE-OF: R-44133-61651 The value Y in likelihood(X,Y) must be a # floating point constant between 0.0 and 1.0, inclusive. # do_execsql_test func3-5.7 { SELECT likelihood(123, 1.0), likelihood(456, 0.0); } {123 456} do_test func3-5.8 { catchsql { SELECT likelihood(123, 1.000001); } } {1 {second argument to likelihood() must be a constant between 0.0 and 1.0}} do_test func3-5.9 { catchsql { SELECT likelihood(123, -0.000001); } } {1 {second argument to likelihood() must be a constant between 0.0 and 1.0}} do_test func3-5.10 { catchsql { SELECT likelihood(123, 0.5+0.3); } } {1 {second argument to likelihood() must be a constant between 0.0 and 1.0}} # EVIDENCE-OF: R-28535-44631 The likelihood(X) function is a no-op that # the code generator optimizes away so that it consumes no CPU cycles # during run-time (that is, during calls to sqlite3_step()). # do_test func3-5.20 { db eval {EXPLAIN SELECT likelihood(min(1.0+'2.0',4*11), 0.5)} } [db eval {EXPLAIN SELECT min(1.0+'2.0',4*11)}] # EVIDENCE-OF: R-11152-23456 The unlikely(X) function returns the # argument X unchanged. # do_execsql_test func3-5.30 { SELECT unlikely(9223372036854775807); } {9223372036854775807} do_execsql_test func3-5.31 { SELECT unlikely(-9223372036854775808); } {-9223372036854775808} do_execsql_test func3-5.32 { SELECT unlikely(14.125); } {14.125} do_execsql_test func3-5.33 { SELECT unlikely(NULL); } {{}} do_execsql_test func3-5.34 { SELECT unlikely('test-string'); } {test-string} do_execsql_test func3-5.35 { SELECT quote(unlikely(x'010203000405')); } {X'010203000405'} # EVIDENCE-OF: R-22887-63324 The unlikely(X) function is a no-op that # the code generator optimizes away so that it consumes no CPU cycles at # run-time (that is, during calls to sqlite3_step()). # do_test func3-5.40 { db eval {EXPLAIN SELECT unlikely(min(1.0+'2.0',4*11))} } [db eval {EXPLAIN SELECT min(1.0+'2.0',4*11)}] finish_test |
Changes to test/instr.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # 2012 October 24 # # 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. # #*********************************************************************** # This file implements regression tests for SQLite library. The # focus of this file is testing the built-in INSTR() functions. # set testdir [file dirname $argv0] source $testdir/tester.tcl # Create a table to work with. # do_test instr-1.1 { | > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | # 2012 October 24 # # 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. # #*********************************************************************** # This file implements regression tests for SQLite library. The # focus of this file is testing the built-in INSTR() functions. # # EVIDENCE-OF: R-27549-59611 The instr(X,Y) function finds the first # occurrence of string Y within string X and returns the number of prior # characters plus 1, or 0 if Y is nowhere found within X. # set testdir [file dirname $argv0] source $testdir/tester.tcl # Create a table to work with. # do_test instr-1.1 { |
︙ | ︙ | |||
195 196 197 198 199 200 201 | } {106496} do_test instr-1.54 { db eval {SELECT instr(x'78c3a4e282ac79','x');} } {1} do_test instr-1.55 { db eval {SELECT instr(x'78c3a4e282ac79','y');} } {4} | > > > > > | | > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > | 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 | } {106496} do_test instr-1.54 { db eval {SELECT instr(x'78c3a4e282ac79','x');} } {1} do_test instr-1.55 { db eval {SELECT instr(x'78c3a4e282ac79','y');} } {4} # EVIDENCE-OF: R-46421-32541 Or, if X and Y are both BLOBs, then # instr(X,Y) returns one more than the number bytes prior to the first # occurrence of Y, or 0 if Y does not occur anywhere within X. # do_test instr-1.56.1 { db eval {SELECT instr(x'78c3a4e282ac79',x'79');} } {7} do_test instr-1.56.2 { db eval {SELECT instr(x'78c3a4e282ac79',x'7a');} } {0} do_test instr-1.56.3 { db eval {SELECT instr(x'78c3a4e282ac79',x'78');} } {1} do_test instr-1.56.3 { db eval {SELECT instr(x'78c3a4e282ac79',x'a4');} } {3} # EVIDENCE-OF: R-17329-35644 If both arguments X and Y to instr(X,Y) are # non-NULL and are not BLOBs then both are interpreted as strings. # do_test instr-1.57.1 { db eval {SELECT instr('xä€y',x'79');} } {4} do_test instr-1.57.2 { db eval {SELECT instr('xä€y',x'a4');} } {0} do_test instr-1.57.3 { db eval {SELECT instr(x'78c3a4e282ac79','y');} } {4} # EVIDENCE-OF: R-14708-27487 If either X or Y are NULL in instr(X,Y) # then the result is NULL. # do_execsql_test instr-1.60 { SELECT coalesce(instr(NULL,'abc'), 999); } {999} do_execsql_test instr-1.61 { SELECT coalesce(instr('abc',NULL), 999); } {999} do_execsql_test instr-1.62 { SELECT coalesce(instr(NULL,NULL), 999); } {999} finish_test |