Annotation of embedaddon/sqlite3/test/func2.test, revision 1.1.1.1
1.1 misho 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
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>