1: # 2009 February 24
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.
12: #
13: # This file implements tests for the compile time diagnostic
14: # functions.
15: #
16:
17: set testdir [file dirname $argv0]
18: source $testdir/tester.tcl
19:
20: # Test organization:
21: #
22: # ctime-1.*: Test pragma support.
23: # ctime-2.*: Test function support.
24: #
25:
26: ifcapable !pragma||!compileoption_diags {
27: finish_test
28: return
29: }
30:
31: #####################
32: # ctime-1.*: Test pragma support.
33:
34: do_test ctime-1.1.1 {
35: catchsql {
36: PRAGMA compile_options();
37: }
38: } {1 {near ")": syntax error}}
39: do_test ctime-1.1.2 {
40: catchsql {
41: PRAGMA compile_options(NULL);
42: }
43: } {1 {near "NULL": syntax error}}
44: do_test ctime-1.1.3 {
45: catchsql {
46: PRAGMA compile_options *;
47: }
48: } {1 {near "*": syntax error}}
49:
50: do_test ctime-1.2.1 {
51: set ans [ catchsql {
52: PRAGMA compile_options;
53: } ]
54: list [ lindex $ans 0 ]
55: } {0}
56: # the results should be in sorted order already
57: do_test ctime-1.2.2 {
58: set ans [ catchsql {
59: PRAGMA compile_options;
60: } ]
61: list [ lindex $ans 0 ] [ expr { [lsort [lindex $ans 1]]==[lindex $ans 1] } ]
62: } {0 1}
63:
64: # SQLITE_THREADSAFE should pretty much always be defined
65: # one way or the other, and it must have a value of 0 or 1.
66: do_test ctime-1.4.1 {
67: catchsql {
68: SELECT sqlite_compileoption_used('SQLITE_THREADSAFE');
69: }
70: } {0 1}
71: do_test ctime-1.4.2 {
72: catchsql {
73: SELECT sqlite_compileoption_used('THREADSAFE');
74: }
75: } {0 1}
76: do_test ctime-1.4.3 {
77: catchsql {
78: SELECT sqlite_compileoption_used("THREADSAFE");
79: }
80: } {0 1}
81:
82: do_test ctime-1.5 {
83: set ans1 [ catchsql {
84: SELECT sqlite_compileoption_used('THREADSAFE=0');
85: } ]
86: set ans2 [ catchsql {
87: SELECT sqlite_compileoption_used('THREADSAFE=1');
88: } ]
89: set ans3 [ catchsql {
90: SELECT sqlite_compileoption_used('THREADSAFE=2');
91: } ]
92: lsort [ list $ans1 $ans2 $ans3 ]
93: } {{0 0} {0 0} {0 1}}
94:
95: do_test ctime-1.6 {
96: execsql {
97: SELECT sqlite_compileoption_used('THREADSAFE=');
98: }
99: } {0}
100:
101: do_test ctime-1.7.1 {
102: execsql {
103: SELECT sqlite_compileoption_used('SQLITE_OMIT_COMPILEOPTION_DIAGS');
104: }
105: } {0}
106: do_test ctime-1.7.2 {
107: execsql {
108: SELECT sqlite_compileoption_used('OMIT_COMPILEOPTION_DIAGS');
109: }
110: } {0}
111:
112: #####################
113: # ctime-2.*: Test function support.
114:
115: do_test ctime-2.1.1 {
116: catchsql {
117: SELECT sqlite_compileoption_used();
118: }
119: } {1 {wrong number of arguments to function sqlite_compileoption_used()}}
120: do_test ctime-2.1.2 {
121: catchsql {
122: SELECT sqlite_compileoption_used(NULL);
123: }
124: } {0 {{}}}
125: do_test ctime-2.1.3 {
126: catchsql {
127: SELECT sqlite_compileoption_used("");
128: }
129: } {0 0}
130: do_test ctime-2.1.4 {
131: catchsql {
132: SELECT sqlite_compileoption_used('');
133: }
134: } {0 0}
135: do_test ctime-2.1.5 {
136: catchsql {
137: SELECT sqlite_compileoption_used(foo);
138: }
139: } {1 {no such column: foo}}
140: do_test ctime-2.1.6 {
141: catchsql {
142: SELECT sqlite_compileoption_used('THREADSAFE', 0);
143: }
144: } {1 {wrong number of arguments to function sqlite_compileoption_used()}}
145: do_test ctime-2.1.7 {
146: catchsql {
147: SELECT sqlite_compileoption_used(0);
148: }
149: } {0 0}
150: do_test ctime-2.1.8 {
151: catchsql {
152: SELECT sqlite_compileoption_used('0');
153: }
154: } {0 0}
155: do_test ctime-2.1.9 {
156: catchsql {
157: SELECT sqlite_compileoption_used(1.0);
158: }
159: } {0 0}
160:
161: do_test ctime-2.2.1 {
162: catchsql {
163: SELECT sqlite_compileoption_get();
164: }
165: } {1 {wrong number of arguments to function sqlite_compileoption_get()}}
166: do_test ctime-2.2.2 {
167: catchsql {
168: SELECT sqlite_compileoption_get(0, 0);
169: }
170: } {1 {wrong number of arguments to function sqlite_compileoption_get()}}
171:
172: # This assumes there is at least 1 compile time option
173: # (see SQLITE_THREADSAFE above).
174: do_test ctime-2.3 {
175: catchsql {
176: SELECT sqlite_compileoption_used(sqlite_compileoption_get(0));
177: }
178: } {0 1}
179:
180: # This assumes there is at least 1 compile time option
181: # (see SQLITE_THREADSAFE above).
182: do_test ctime-2.4 {
183: set ans [ catchsql {
184: SELECT sqlite_compileoption_get(0);
185: } ]
186: list [lindex $ans 0]
187: } {0}
188:
189: # Get the list of defines using the pragma,
190: # then try querying each one with the functions.
191: set ans [ catchsql {
192: PRAGMA compile_options;
193: } ]
194: set opts [ lindex $ans 1 ]
195: set tc 1
196: foreach opt $opts {
197: do_test ctime-2.5.$tc {
198: set N [ expr {$tc-1} ]
199: set ans1 [ catchsql {
200: SELECT sqlite_compileoption_get($N);
201: } ]
202: set ans2 [ catchsql {
203: SELECT sqlite_compileoption_used($opt);
204: } ]
205: list [ lindex $ans1 0 ] [ expr { [lindex $ans1 1]==$opt } ] \
206: [ expr { $ans2 } ]
207: } {0 1 {0 1}}
208: incr tc 1
209: }
210: # test 1 past array bounds
211: do_test ctime-2.5.$tc {
212: set N [ expr {$tc-1} ]
213: set ans [ catchsql {
214: SELECT sqlite_compileoption_get($N);
215: } ]
216: } {0 {{}}}
217: incr tc 1
218: # test 1 before array bounds (N=-1)
219: do_test ctime-2.5.$tc {
220: set N -1
221: set ans [ catchsql {
222: SELECT sqlite_compileoption_get($N);
223: } ]
224: } {0 {{}}}
225:
226:
227: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>