wasCSharpSQLite – Blame information for rev

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 # 2009 November 11
2 #
3 # The author disclaims copyright to this source code. In place of
4 # a legal notice, here is a blessing:
5 #
6 # May you do good and not evil.
7 # May you find forgiveness for yourself and forgive others.
8 # May you share freely, never taking more than you give.
9 #
10 #***********************************************************************
11 # This file implements regression tests for SQLite library. The
12 # focus of this file is testing built-in functions.
13 #
14  
15 set testdir [file dirname $argv0]
16 source $testdir/tester.tcl
17  
18 # Test plan:
19 #
20 # func2-1.*: substr implementation (ascii)
21 # func2-2.*: substr implementation (utf8)
22 # func2-3.*: substr implementation (blob)
23 #
24  
25 proc bin_to_hex {blob} {
26 set bytes {}
27 binary scan $blob \c* bytes
28 set bytes2 [list]
29 foreach b $bytes {lappend bytes2 [format %02X [expr $b & 0xFF]]}
30 join $bytes2 {}
31 }
32  
33 #----------------------------------------------------------------------------
34 # Test cases func2-1.*: substr implementation (ascii)
35 #
36  
37 do_test func2-1.1 {
38 execsql {SELECT 'Supercalifragilisticexpialidocious'}
39 } {Supercalifragilisticexpialidocious}
40  
41 # substr(x,y), substr(x,y,z)
42 do_test func2-1.2.1 {
43 catchsql {SELECT SUBSTR()}
44 } {1 {wrong number of arguments to function SUBSTR()}}
45 do_test func2-1.2.2 {
46 catchsql {SELECT SUBSTR('Supercalifragilisticexpialidocious')}
47 } {1 {wrong number of arguments to function SUBSTR()}}
48 do_test func2-1.2.3 {
49 catchsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 1,1,1)}
50 } {1 {wrong number of arguments to function SUBSTR()}}
51  
52 # p1 is 1-indexed
53 do_test func2-1.3 {
54 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0)}
55 } {Supercalifragilisticexpialidocious}
56 do_test func2-1.4 {
57 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 1)}
58 } {Supercalifragilisticexpialidocious}
59 do_test func2-1.5 {
60 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2)}
61 } {upercalifragilisticexpialidocious}
62 do_test func2-1.6 {
63 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 30)}
64 } {cious}
65 do_test func2-1.7 {
66 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 34)}
67 } {s}
68 do_test func2-1.8 {
69 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 35)}
70 } {{}}
71 do_test func2-1.9 {
72 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 36)}
73 } {{}}
74  
75 # if p1<0, start from right
76 do_test func2-1.10 {
77 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -0)}
78 } {Supercalifragilisticexpialidocious}
79 do_test func2-1.11 {
80 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -1)}
81 } {s}
82 do_test func2-1.12 {
83 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -2)}
84 } {us}
85 do_test func2-1.13 {
86 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -30)}
87 } {rcalifragilisticexpialidocious}
88 do_test func2-1.14 {
89 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -34)}
90 } {Supercalifragilisticexpialidocious}
91 do_test func2-1.15 {
92 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -35)}
93 } {Supercalifragilisticexpialidocious}
94 do_test func2-1.16 {
95 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -36)}
96 } {Supercalifragilisticexpialidocious}
97  
98 # p1 is 1-indexed, p2 length to return
99 do_test func2-1.17.1 {
100 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, 1)}
101 } {{}}
102 do_test func2-1.17.2 {
103 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, 2)}
104 } {S}
105 do_test func2-1.18 {
106 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 1, 1)}
107 } {S}
108 do_test func2-1.19.0 {
109 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, 0)}
110 } {{}}
111 do_test func2-1.19.1 {
112 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, 1)}
113 } {u}
114 do_test func2-1.19.2 {
115 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, 2)}
116 } {up}
117 do_test func2-1.20 {
118 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 30, 1)}
119 } {c}
120 do_test func2-1.21 {
121 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 34, 1)}
122 } {s}
123 do_test func2-1.22 {
124 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 35, 1)}
125 } {{}}
126 do_test func2-1.23 {
127 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 36, 1)}
128 } {{}}
129  
130 # if p1<0, start from right, p2 length to return
131 do_test func2-1.24 {
132 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -0, 1)}
133 } {{}}
134 do_test func2-1.25.0 {
135 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -1, 0)}
136 } {{}}
137 do_test func2-1.25.1 {
138 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -1, 1)}
139 } {s}
140 do_test func2-1.25.2 {
141 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -1, 2)}
142 } {s}
143 do_test func2-1.26 {
144 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -2, 1)}
145 } {u}
146 do_test func2-1.27 {
147 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -30, 1)}
148 } {r}
149 do_test func2-1.28.0 {
150 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -34, 0)}
151 } {{}}
152 do_test func2-1.28.1 {
153 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -34, 1)}
154 } {S}
155 do_test func2-1.28.2 {
156 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -34, 2)}
157 } {Su}
158 do_test func2-1.29.1 {
159 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -35, 1)}
160 } {{}}
161 do_test func2-1.29.2 {
162 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -35, 2)}
163 } {S}
164 do_test func2-1.30.0 {
165 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -36, 0)}
166 } {{}}
167 do_test func2-1.30.1 {
168 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -36, 1)}
169 } {{}}
170 do_test func2-1.30.2 {
171 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -36, 2)}
172 } {{}}
173 do_test func2-1.30.3 {
174 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', -36, 3)}
175 } {S}
176  
177 # p1 is 1-indexed, p2 length to return, p2<0 return p2 chars before p1
178 do_test func2-1.31.0 {
179 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, 0)}
180 } {{}}
181 do_test func2-1.31.1 {
182 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, -1)}
183 } {{}}
184 do_test func2-1.31.2 {
185 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 0, -2)}
186 } {{}}
187 do_test func2-1.32.0 {
188 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 1, 0)}
189 } {{}}
190 do_test func2-1.32.1 {
191 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 1, -1)}
192 } {{}}
193 do_test func2-1.33.0 {
194 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, 0)}
195 } {{}}
196 do_test func2-1.33.1 {
197 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, -1)}
198 } {S}
199 do_test func2-1.33.2 {
200 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 2, -2)}
201 } {S}
202 do_test func2-1.34.0 {
203 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 3, 0)}
204 } {{}}
205 do_test func2-1.34.1 {
206 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 3, -1)}
207 } {u}
208 do_test func2-1.34.2 {
209 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 3, -2)}
210 } {Su}
211 do_test func2-1.35.1 {
212 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 30, -1)}
213 } {o}
214 do_test func2-1.35.2 {
215 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 30, -2)}
216 } {do}
217 do_test func2-1.36 {
218 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 34, -1)}
219 } {u}
220 do_test func2-1.37 {
221 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 35, -1)}
222 } {s}
223 do_test func2-1.38.0 {
224 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 36, 0)}
225 } {{}}
226 do_test func2-1.38.1 {
227 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 36, -1)}
228 } {{}}
229 do_test func2-1.38.2 {
230 execsql {SELECT SUBSTR('Supercalifragilisticexpialidocious', 36, -2)}
231 } {s}
232  
233  
234 #----------------------------------------------------------------------------
235 # Test cases func2-2.*: substr implementation (utf8)
236 #
237  
238 # Only do the following tests if TCL has UTF-8 capabilities
239 #
240 if {"\u1234"!="u1234"} {
241  
242 do_test func2-2.1.1 {
243 execsql "SELECT 'hi\u1234ho'"
244 } "hi\u1234ho"
245  
246 # substr(x,y), substr(x,y,z)
247 do_test func2-2.1.2 {
248 catchsql "SELECT SUBSTR()"
249 } {1 {wrong number of arguments to function SUBSTR()}}
250 do_test func2-2.1.3 {
251 catchsql "SELECT SUBSTR('hi\u1234ho')"
252 } {1 {wrong number of arguments to function SUBSTR()}}
253 do_test func2-2.1.4 {
254 catchsql "SELECT SUBSTR('hi\u1234ho', 1,1,1)"
255 } {1 {wrong number of arguments to function SUBSTR()}}
256  
257 do_test func2-2.2.0 {
258 execsql "SELECT SUBSTR('hi\u1234ho', 0, 0)"
259 } {{}}
260 do_test func2-2.2.1 {
261 execsql "SELECT SUBSTR('hi\u1234ho', 0, 1)"
262 } {{}}
263 do_test func2-2.2.2 {
264 execsql "SELECT SUBSTR('hi\u1234ho', 0, 2)"
265 } "h"
266 do_test func2-2.2.3 {
267 execsql "SELECT SUBSTR('hi\u1234ho', 0, 3)"
268 } "hi"
269 do_test func2-2.2.4 {
270 execsql "SELECT SUBSTR('hi\u1234ho', 0, 4)"
271 } "hi\u1234"
272 do_test func2-2.2.5 {
273 execsql "SELECT SUBSTR('hi\u1234ho', 0, 5)"
274 } "hi\u1234h"
275 do_test func2-2.2.6 {
276 execsql "SELECT SUBSTR('hi\u1234ho', 0, 6)"
277 } "hi\u1234ho"
278  
279 do_test func2-2.3.0 {
280 execsql "SELECT SUBSTR('hi\u1234ho', 1, 0)"
281 } {{}}
282 do_test func2-2.3.1 {
283 execsql "SELECT SUBSTR('hi\u1234ho', 1, 1)"
284 } "h"
285 do_test func2-2.3.2 {
286 execsql "SELECT SUBSTR('hi\u1234ho', 1, 2)"
287 } "hi"
288 do_test func2-2.3.3 {
289 execsql "SELECT SUBSTR('hi\u1234ho', 1, 3)"
290 } "hi\u1234"
291 do_test func2-2.3.4 {
292 execsql "SELECT SUBSTR('hi\u1234ho', 1, 4)"
293 } "hi\u1234h"
294 do_test func2-2.3.5 {
295 execsql "SELECT SUBSTR('hi\u1234ho', 1, 5)"
296 } "hi\u1234ho"
297 do_test func2-2.3.6 {
298 execsql "SELECT SUBSTR('hi\u1234ho', 1, 6)"
299 } "hi\u1234ho"
300  
301 do_test func2-2.4.0 {
302 execsql "SELECT SUBSTR('hi\u1234ho', 3, 0)"
303 } {{}}
304 do_test func2-2.4.1 {
305 execsql "SELECT SUBSTR('hi\u1234ho', 3, 1)"
306 } "\u1234"
307 do_test func2-2.4.2 {
308 execsql "SELECT SUBSTR('hi\u1234ho', 3, 2)"
309 } "\u1234h"
310  
311 do_test func2-2.5.0 {
312 execsql "SELECT SUBSTR('\u1234', 0, 0)"
313 } {{}}
314 do_test func2-2.5.1 {
315 execsql "SELECT SUBSTR('\u1234', 0, 1)"
316 } {{}}
317 do_test func2-2.5.2 {
318 execsql "SELECT SUBSTR('\u1234', 0, 2)"
319 } "\u1234"
320 do_test func2-2.5.3 {
321 execsql "SELECT SUBSTR('\u1234', 0, 3)"
322 } "\u1234"
323  
324 do_test func2-2.6.0 {
325 execsql "SELECT SUBSTR('\u1234', 1, 0)"
326 } {{}}
327 do_test func2-2.6.1 {
328 execsql "SELECT SUBSTR('\u1234', 1, 1)"
329 } "\u1234"
330 do_test func2-2.6.2 {
331 execsql "SELECT SUBSTR('\u1234', 1, 2)"
332 } "\u1234"
333 do_test func2-2.6.3 {
334 execsql "SELECT SUBSTR('\u1234', 1, 3)"
335 } "\u1234"
336  
337 do_test func2-2.7.0 {
338 execsql "SELECT SUBSTR('\u1234', 2, 0)"
339 } {{}}
340 do_test func2-2.7.1 {
341 execsql "SELECT SUBSTR('\u1234', 2, 1)"
342 } {{}}
343 do_test func2-2.7.2 {
344 execsql "SELECT SUBSTR('\u1234', 2, 2)"
345 } {{}}
346  
347 do_test func2-2.8.0 {
348 execsql "SELECT SUBSTR('\u1234', -1, 0)"
349 } {{}}
350 do_test func2-2.8.1 {
351 execsql "SELECT SUBSTR('\u1234', -1, 1)"
352 } "\u1234"
353 do_test func2-2.8.2 {
354 execsql "SELECT SUBSTR('\u1234', -1, 2)"
355 } "\u1234"
356 do_test func2-2.8.3 {
357 execsql "SELECT SUBSTR('\u1234', -1, 3)"
358 } "\u1234"
359  
360 } ;# End \u1234!=u1234
361  
362 #----------------------------------------------------------------------------
363 # Test cases func2-3.*: substr implementation (blob)
364 #
365  
366 ifcapable {!bloblit} {
367 finish_test
368 return
369 }
370  
371 do_test func2-3.1.1 {
372 set blob [execsql "SELECT x'1234'"]
373 bin_to_hex [lindex $blob 0]
374 } "1234"
375  
376 # substr(x,y), substr(x,y,z)
377 do_test func2-3.1.2 {
378 catchsql {SELECT SUBSTR()}
379 } {1 {wrong number of arguments to function SUBSTR()}}
380 do_test func2-3.1.3 {
381 catchsql {SELECT SUBSTR(x'1234')}
382 } {1 {wrong number of arguments to function SUBSTR()}}
383 do_test func2-3.1.4 {
384 catchsql {SELECT SUBSTR(x'1234', 1,1,1)}
385 } {1 {wrong number of arguments to function SUBSTR()}}
386  
387 do_test func2-3.2.0 {
388 set blob [execsql "SELECT SUBSTR(x'1234', 0, 0)"]
389 bin_to_hex [lindex $blob 0]
390 } {}
391 do_test func2-3.2.1 {
392 set blob [execsql "SELECT SUBSTR(x'1234', 0, 1)"]
393 bin_to_hex [lindex $blob 0]
394 } {}
395 do_test func2-3.2.2 {
396 set blob [execsql "SELECT SUBSTR(x'1234', 0, 2)"]
397 bin_to_hex [lindex $blob 0]
398 } "12"
399 do_test func2-3.2.3 {
400 set blob [execsql "SELECT SUBSTR(x'1234', 0, 3)"]
401 bin_to_hex [lindex $blob 0]
402 } "1234"
403  
404 do_test func2-3.3.0 {
405 set blob [execsql "SELECT SUBSTR(x'1234', 1, 0)"]
406 bin_to_hex [lindex $blob 0]
407 } {}
408 do_test func2-3.3.1 {
409 set blob [execsql "SELECT SUBSTR(x'1234', 1, 1)"]
410 bin_to_hex [lindex $blob 0]
411 } "12"
412 do_test func2-3.3.2 {
413 set blob [execsql "SELECT SUBSTR(x'1234', 1, 2)"]
414 bin_to_hex [lindex $blob 0]
415 } "1234"
416 do_test func2-3.3.3 {
417 set blob [execsql "SELECT SUBSTR(x'1234', 1, 3)"]
418 bin_to_hex [lindex $blob 0]
419 } "1234"
420  
421 do_test func2-3.4.0 {
422 set blob [execsql "SELECT SUBSTR(x'1234', -1, 0)"]
423 bin_to_hex [lindex $blob 0]
424 } {}
425 do_test func2-3.4.1 {
426 set blob [execsql "SELECT SUBSTR(x'1234', -1, 1)"]
427 bin_to_hex [lindex $blob 0]
428 } "34"
429 do_test func2-3.4.2 {
430 set blob [execsql "SELECT SUBSTR(x'1234', -1, 2)"]
431 bin_to_hex [lindex $blob 0]
432 } "34"
433 do_test func2-3.4.3 {
434 set blob [execsql "SELECT SUBSTR(x'1234', -1, 3)"]
435 bin_to_hex [lindex $blob 0]
436 } "34"
437  
438 do_test func2-3.5.0 {
439 set blob [execsql "SELECT SUBSTR(x'1234', -2, 0)"]
440 bin_to_hex [lindex $blob 0]
441 } {}
442 do_test func2-3.5.1 {
443 set blob [execsql "SELECT SUBSTR(x'1234', -2, 1)"]
444 bin_to_hex [lindex $blob 0]
445 } "12"
446 do_test func2-3.5.2 {
447 set blob [execsql "SELECT SUBSTR(x'1234', -2, 2)"]
448 bin_to_hex [lindex $blob 0]
449 } "1234"
450 do_test func2-3.5.3 {
451 set blob [execsql "SELECT SUBSTR(x'1234', -2, 3)"]
452 bin_to_hex [lindex $blob 0]
453 } "1234"
454  
455 do_test func2-3.6.0 {
456 set blob [execsql "SELECT SUBSTR(x'1234', -1, 0)"]
457 bin_to_hex [lindex $blob 0]
458 } {}
459 do_test func2-3.6.1 {
460 set blob [execsql "SELECT SUBSTR(x'1234', -1, -1)"]
461 bin_to_hex [lindex $blob 0]
462 } "12"
463 do_test func2-3.6.2 {
464 set blob [execsql "SELECT SUBSTR(x'1234', -1, -2)"]
465 bin_to_hex [lindex $blob 0]
466 } "12"
467 do_test func2-3.6.3 {
468 set blob [execsql "SELECT SUBSTR(x'1234', -1, -3)"]
469 bin_to_hex [lindex $blob 0]
470 } "12"
471  
472 do_test func2-3.7.0 {
473 set blob [execsql "SELECT SUBSTR(x'1234', -2, 0)"]
474 bin_to_hex [lindex $blob 0]
475 } {}
476 do_test func2-3.7.1 {
477 set blob [execsql "SELECT SUBSTR(x'1234', -2, -1)"]
478 bin_to_hex [lindex $blob 0]
479 } {}
480 do_test func2-3.7.2 {
481 set blob [execsql "SELECT SUBSTR(x'1234', -2, -2)"]
482 bin_to_hex [lindex $blob 0]
483 } {}
484  
485 do_test func2-3.8.0 {
486 set blob [execsql "SELECT SUBSTR(x'1234', 1, 0)"]
487 bin_to_hex [lindex $blob 0]
488 } {}
489 do_test func2-3.8.1 {
490 set blob [execsql "SELECT SUBSTR(x'1234', 1, -1)"]
491 bin_to_hex [lindex $blob 0]
492 } {}
493 do_test func2-3.8.2 {
494 set blob [execsql "SELECT SUBSTR(x'1234', 1, -2)"]
495 bin_to_hex [lindex $blob 0]
496 } {}
497  
498 do_test func2-3.9.0 {
499 set blob [execsql "SELECT SUBSTR(x'1234', 2, 0)"]
500 bin_to_hex [lindex $blob 0]
501 } {}
502 do_test func2-3.9.1 {
503 set blob [execsql "SELECT SUBSTR(x'1234', 2, -1)"]
504 bin_to_hex [lindex $blob 0]
505 } "12"
506 do_test func2-3.9.2 {
507 set blob [execsql "SELECT SUBSTR(x'1234', 2, -2)"]
508 bin_to_hex [lindex $blob 0]
509 } "12"
510  
511 finish_test