OLD | NEW |
| (Empty) |
1 # 2013-12-17 | |
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 the printf() SQL function. | |
13 # | |
14 # | |
15 # EVIDENCE-OF: R-63057-40065 The printf(FORMAT,...) SQL function works | |
16 # like the sqlite3_mprintf() C-language function and the printf() | |
17 # function from the standard C library. | |
18 # | |
19 | |
20 set testdir [file dirname $argv0] | |
21 source $testdir/tester.tcl | |
22 | |
23 # EVIDENCE-OF: R-40086-60101 If the FORMAT argument is missing or NULL | |
24 # then the result is NULL. | |
25 # | |
26 do_execsql_test printf2-1.1 { | |
27 SELECT quote(printf()), quote(printf(NULL,1,2,3)); | |
28 } {NULL NULL} | |
29 | |
30 | |
31 do_execsql_test printf2-1.2 { | |
32 SELECT printf('hello'); | |
33 } {hello} | |
34 do_execsql_test printf2-1.3 { | |
35 SELECT printf('%d,%d,%d',55,-11,3421); | |
36 } {55,-11,3421} | |
37 do_execsql_test printf2-1.4 { | |
38 SELECT printf('%d,%d,%d',55,'-11',3421); | |
39 } {55,-11,3421} | |
40 do_execsql_test printf2-1.5 { | |
41 SELECT printf('%d,%d,%d,%d',55,'-11',3421); | |
42 } {55,-11,3421,0} | |
43 do_execsql_test printf2-1.6 { | |
44 SELECT printf('%.2f',3.141592653); | |
45 } {3.14} | |
46 do_execsql_test printf2-1.7 { | |
47 SELECT printf('%.*f',2,3.141592653); | |
48 } {3.14} | |
49 do_execsql_test printf2-1.8 { | |
50 SELECT printf('%*.*f',5,2,3.141592653); | |
51 } {{ 3.14}} | |
52 do_execsql_test printf2-1.9 { | |
53 SELECT printf('%d',314159.2653); | |
54 } {314159} | |
55 do_execsql_test printf2-1.10 { | |
56 SELECT printf('%lld',314159.2653); | |
57 } {314159} | |
58 do_execsql_test printf2-1.11 { | |
59 SELECT printf('%lld%n',314159.2653,'hi'); | |
60 } {314159} | |
61 | |
62 # EVIDENCE-OF: R-17002-27534 The %z format is interchangeable with %s. | |
63 # | |
64 do_execsql_test printf2-1.12 { | |
65 SELECT printf('%.*z',5,'abcdefghijklmnop'); | |
66 } {abcde} | |
67 do_execsql_test printf2-1.13 { | |
68 SELECT printf('%c','abcdefghijklmnop'); | |
69 } {a} | |
70 | |
71 # EVIDENCE-OF: R-02347-27622 The %n format is silently ignored and does | |
72 # not consume an argument. | |
73 # | |
74 do_execsql_test printf2-2.1 { | |
75 CREATE TABLE t1(a,b,c); | |
76 INSERT INTO t1 VALUES(1,2,3); | |
77 INSERT INTO t1 VALUES(-1,-2,-3); | |
78 INSERT INTO t1 VALUES('abc','def','ghi'); | |
79 INSERT INTO t1 VALUES(1.5,2.25,3.125); | |
80 SELECT printf('(%s)-%n-(%s)',a,b,c) FROM t1 ORDER BY rowid; | |
81 } {(1)--(2) (-1)--(-2) (abc)--(def) (1.5)--(2.25)} | |
82 | |
83 # EVIDENCE-OF: R-56064-04001 The %p format is an alias for %X. | |
84 # | |
85 do_execsql_test printf2-2.2 { | |
86 SELECT printf('%s=(%p)',a,a) FROM t1 ORDER BY a; | |
87 } {-1=(FFFFFFFFFFFFFFFF) 1=(1) 1.5=(1) abc=(0)} | |
88 | |
89 # EVIDENCE-OF: R-29410-53018 If there are too few arguments in the | |
90 # argument list, missing arguments are assumed to have a NULL value, | |
91 # which is translated into 0 or 0.0 for numeric formats or an empty | |
92 # string for %s. | |
93 # | |
94 do_execsql_test printf2-2.3 { | |
95 SELECT printf('%s=(%d/%g/%s)',a) FROM t1 ORDER BY a; | |
96 } {-1=(0/0/) 1=(0/0/) 1.5=(0/0/) abc=(0/0/)} | |
97 | |
98 # The precision of the %c conversion causes the character to repeat. | |
99 # | |
100 do_execsql_test printf2-3.1 { | |
101 SELECT printf('|%110.100c|','*'); | |
102 } {{| *****************************************************************
***********************************|}} | |
103 do_execsql_test printf2-3.2 { | |
104 SELECT printf('|%-110.100c|','*'); | |
105 } {{|***************************************************************************
************************* |}} | |
106 do_execsql_test printf2-3.3 { | |
107 SELECT printf('|%9.8c|%-9.8c|','*','*'); | |
108 } {{| ********|******** |}} | |
109 do_execsql_test printf2-3.4 { | |
110 SELECT printf('|%8.8c|%-8.8c|','*','*'); | |
111 } {|********|********|} | |
112 do_execsql_test printf2-3.5 { | |
113 SELECT printf('|%7.8c|%-7.8c|','*','*'); | |
114 } {|********|********|} | |
115 | |
116 | |
117 | |
118 | |
119 finish_test | |
OLD | NEW |