]> granicus.if.org Git - postgresql/blob - src/test/regress/sql/numeric.sql
Re-implement division for numeric values using the traditional "schoolbook"
[postgresql] / src / test / regress / sql / numeric.sql
1 --
2 -- NUMERIC
3 --
4
5 CREATE TABLE num_data (id int4, val numeric(210,10));
6 CREATE TABLE num_exp_add (id1 int4, id2 int4, expected numeric(210,10));
7 CREATE TABLE num_exp_sub (id1 int4, id2 int4, expected numeric(210,10));
8 CREATE TABLE num_exp_div (id1 int4, id2 int4, expected numeric(210,10));
9 CREATE TABLE num_exp_mul (id1 int4, id2 int4, expected numeric(210,10));
10 CREATE TABLE num_exp_sqrt (id int4, expected numeric(210,10));
11 CREATE TABLE num_exp_ln (id int4, expected numeric(210,10));
12 CREATE TABLE num_exp_log10 (id int4, expected numeric(210,10));
13 CREATE TABLE num_exp_power_10_ln (id int4, expected numeric(210,10));
14
15 CREATE TABLE num_result (id1 int4, id2 int4, result numeric(210,10));
16
17
18 -- ******************************
19 -- * The following EXPECTED results are computed by bc(1)
20 -- * with a scale of 200
21 -- ******************************
22
23 BEGIN TRANSACTION;
24 INSERT INTO num_exp_add VALUES (0,0,'0');
25 INSERT INTO num_exp_sub VALUES (0,0,'0');
26 INSERT INTO num_exp_mul VALUES (0,0,'0');
27 INSERT INTO num_exp_div VALUES (0,0,'NaN');
28 INSERT INTO num_exp_add VALUES (0,1,'0');
29 INSERT INTO num_exp_sub VALUES (0,1,'0');
30 INSERT INTO num_exp_mul VALUES (0,1,'0');
31 INSERT INTO num_exp_div VALUES (0,1,'NaN');
32 INSERT INTO num_exp_add VALUES (0,2,'-34338492.215397047');
33 INSERT INTO num_exp_sub VALUES (0,2,'34338492.215397047');
34 INSERT INTO num_exp_mul VALUES (0,2,'0');
35 INSERT INTO num_exp_div VALUES (0,2,'0');
36 INSERT INTO num_exp_add VALUES (0,3,'4.31');
37 INSERT INTO num_exp_sub VALUES (0,3,'-4.31');
38 INSERT INTO num_exp_mul VALUES (0,3,'0');
39 INSERT INTO num_exp_div VALUES (0,3,'0');
40 INSERT INTO num_exp_add VALUES (0,4,'7799461.4119');
41 INSERT INTO num_exp_sub VALUES (0,4,'-7799461.4119');
42 INSERT INTO num_exp_mul VALUES (0,4,'0');
43 INSERT INTO num_exp_div VALUES (0,4,'0');
44 INSERT INTO num_exp_add VALUES (0,5,'16397.038491');
45 INSERT INTO num_exp_sub VALUES (0,5,'-16397.038491');
46 INSERT INTO num_exp_mul VALUES (0,5,'0');
47 INSERT INTO num_exp_div VALUES (0,5,'0');
48 INSERT INTO num_exp_add VALUES (0,6,'93901.57763026');
49 INSERT INTO num_exp_sub VALUES (0,6,'-93901.57763026');
50 INSERT INTO num_exp_mul VALUES (0,6,'0');
51 INSERT INTO num_exp_div VALUES (0,6,'0');
52 INSERT INTO num_exp_add VALUES (0,7,'-83028485');
53 INSERT INTO num_exp_sub VALUES (0,7,'83028485');
54 INSERT INTO num_exp_mul VALUES (0,7,'0');
55 INSERT INTO num_exp_div VALUES (0,7,'0');
56 INSERT INTO num_exp_add VALUES (0,8,'74881');
57 INSERT INTO num_exp_sub VALUES (0,8,'-74881');
58 INSERT INTO num_exp_mul VALUES (0,8,'0');
59 INSERT INTO num_exp_div VALUES (0,8,'0');
60 INSERT INTO num_exp_add VALUES (0,9,'-24926804.045047420');
61 INSERT INTO num_exp_sub VALUES (0,9,'24926804.045047420');
62 INSERT INTO num_exp_mul VALUES (0,9,'0');
63 INSERT INTO num_exp_div VALUES (0,9,'0');
64 INSERT INTO num_exp_add VALUES (1,0,'0');
65 INSERT INTO num_exp_sub VALUES (1,0,'0');
66 INSERT INTO num_exp_mul VALUES (1,0,'0');
67 INSERT INTO num_exp_div VALUES (1,0,'NaN');
68 INSERT INTO num_exp_add VALUES (1,1,'0');
69 INSERT INTO num_exp_sub VALUES (1,1,'0');
70 INSERT INTO num_exp_mul VALUES (1,1,'0');
71 INSERT INTO num_exp_div VALUES (1,1,'NaN');
72 INSERT INTO num_exp_add VALUES (1,2,'-34338492.215397047');
73 INSERT INTO num_exp_sub VALUES (1,2,'34338492.215397047');
74 INSERT INTO num_exp_mul VALUES (1,2,'0');
75 INSERT INTO num_exp_div VALUES (1,2,'0');
76 INSERT INTO num_exp_add VALUES (1,3,'4.31');
77 INSERT INTO num_exp_sub VALUES (1,3,'-4.31');
78 INSERT INTO num_exp_mul VALUES (1,3,'0');
79 INSERT INTO num_exp_div VALUES (1,3,'0');
80 INSERT INTO num_exp_add VALUES (1,4,'7799461.4119');
81 INSERT INTO num_exp_sub VALUES (1,4,'-7799461.4119');
82 INSERT INTO num_exp_mul VALUES (1,4,'0');
83 INSERT INTO num_exp_div VALUES (1,4,'0');
84 INSERT INTO num_exp_add VALUES (1,5,'16397.038491');
85 INSERT INTO num_exp_sub VALUES (1,5,'-16397.038491');
86 INSERT INTO num_exp_mul VALUES (1,5,'0');
87 INSERT INTO num_exp_div VALUES (1,5,'0');
88 INSERT INTO num_exp_add VALUES (1,6,'93901.57763026');
89 INSERT INTO num_exp_sub VALUES (1,6,'-93901.57763026');
90 INSERT INTO num_exp_mul VALUES (1,6,'0');
91 INSERT INTO num_exp_div VALUES (1,6,'0');
92 INSERT INTO num_exp_add VALUES (1,7,'-83028485');
93 INSERT INTO num_exp_sub VALUES (1,7,'83028485');
94 INSERT INTO num_exp_mul VALUES (1,7,'0');
95 INSERT INTO num_exp_div VALUES (1,7,'0');
96 INSERT INTO num_exp_add VALUES (1,8,'74881');
97 INSERT INTO num_exp_sub VALUES (1,8,'-74881');
98 INSERT INTO num_exp_mul VALUES (1,8,'0');
99 INSERT INTO num_exp_div VALUES (1,8,'0');
100 INSERT INTO num_exp_add VALUES (1,9,'-24926804.045047420');
101 INSERT INTO num_exp_sub VALUES (1,9,'24926804.045047420');
102 INSERT INTO num_exp_mul VALUES (1,9,'0');
103 INSERT INTO num_exp_div VALUES (1,9,'0');
104 INSERT INTO num_exp_add VALUES (2,0,'-34338492.215397047');
105 INSERT INTO num_exp_sub VALUES (2,0,'-34338492.215397047');
106 INSERT INTO num_exp_mul VALUES (2,0,'0');
107 INSERT INTO num_exp_div VALUES (2,0,'NaN');
108 INSERT INTO num_exp_add VALUES (2,1,'-34338492.215397047');
109 INSERT INTO num_exp_sub VALUES (2,1,'-34338492.215397047');
110 INSERT INTO num_exp_mul VALUES (2,1,'0');
111 INSERT INTO num_exp_div VALUES (2,1,'NaN');
112 INSERT INTO num_exp_add VALUES (2,2,'-68676984.430794094');
113 INSERT INTO num_exp_sub VALUES (2,2,'0');
114 INSERT INTO num_exp_mul VALUES (2,2,'1179132047626883.596862135856320209');
115 INSERT INTO num_exp_div VALUES (2,2,'1.00000000000000000000');
116 INSERT INTO num_exp_add VALUES (2,3,'-34338487.905397047');
117 INSERT INTO num_exp_sub VALUES (2,3,'-34338496.525397047');
118 INSERT INTO num_exp_mul VALUES (2,3,'-147998901.44836127257');
119 INSERT INTO num_exp_div VALUES (2,3,'-7967167.56737750510440835266');
120 INSERT INTO num_exp_add VALUES (2,4,'-26539030.803497047');
121 INSERT INTO num_exp_sub VALUES (2,4,'-42137953.627297047');
122 INSERT INTO num_exp_mul VALUES (2,4,'-267821744976817.8111137106593');
123 INSERT INTO num_exp_div VALUES (2,4,'-4.40267480046830116685');
124 INSERT INTO num_exp_add VALUES (2,5,'-34322095.176906047');
125 INSERT INTO num_exp_sub VALUES (2,5,'-34354889.253888047');
126 INSERT INTO num_exp_mul VALUES (2,5,'-563049578578.769242506736077');
127 INSERT INTO num_exp_div VALUES (2,5,'-2094.18866914563535496429');
128 INSERT INTO num_exp_add VALUES (2,6,'-34244590.637766787');
129 INSERT INTO num_exp_sub VALUES (2,6,'-34432393.793027307');
130 INSERT INTO num_exp_mul VALUES (2,6,'-3224438592470.18449811926184222');
131 INSERT INTO num_exp_div VALUES (2,6,'-365.68599891479766440940');
132 INSERT INTO num_exp_add VALUES (2,7,'-117366977.215397047');
133 INSERT INTO num_exp_sub VALUES (2,7,'48689992.784602953');
134 INSERT INTO num_exp_mul VALUES (2,7,'2851072985828710.485883795');
135 INSERT INTO num_exp_div VALUES (2,7,'.41357483778485235518');
136 INSERT INTO num_exp_add VALUES (2,8,'-34263611.215397047');
137 INSERT INTO num_exp_sub VALUES (2,8,'-34413373.215397047');
138 INSERT INTO num_exp_mul VALUES (2,8,'-2571300635581.146276407');
139 INSERT INTO num_exp_div VALUES (2,8,'-458.57416721727870888476');
140 INSERT INTO num_exp_add VALUES (2,9,'-59265296.260444467');
141 INSERT INTO num_exp_sub VALUES (2,9,'-9411688.170349627');
142 INSERT INTO num_exp_mul VALUES (2,9,'855948866655588.453741509242968740');
143 INSERT INTO num_exp_div VALUES (2,9,'1.37757299946438931811');
144 INSERT INTO num_exp_add VALUES (3,0,'4.31');
145 INSERT INTO num_exp_sub VALUES (3,0,'4.31');
146 INSERT INTO num_exp_mul VALUES (3,0,'0');
147 INSERT INTO num_exp_div VALUES (3,0,'NaN');
148 INSERT INTO num_exp_add VALUES (3,1,'4.31');
149 INSERT INTO num_exp_sub VALUES (3,1,'4.31');
150 INSERT INTO num_exp_mul VALUES (3,1,'0');
151 INSERT INTO num_exp_div VALUES (3,1,'NaN');
152 INSERT INTO num_exp_add VALUES (3,2,'-34338487.905397047');
153 INSERT INTO num_exp_sub VALUES (3,2,'34338496.525397047');
154 INSERT INTO num_exp_mul VALUES (3,2,'-147998901.44836127257');
155 INSERT INTO num_exp_div VALUES (3,2,'-.00000012551512084352');
156 INSERT INTO num_exp_add VALUES (3,3,'8.62');
157 INSERT INTO num_exp_sub VALUES (3,3,'0');
158 INSERT INTO num_exp_mul VALUES (3,3,'18.5761');
159 INSERT INTO num_exp_div VALUES (3,3,'1.00000000000000000000');
160 INSERT INTO num_exp_add VALUES (3,4,'7799465.7219');
161 INSERT INTO num_exp_sub VALUES (3,4,'-7799457.1019');
162 INSERT INTO num_exp_mul VALUES (3,4,'33615678.685289');
163 INSERT INTO num_exp_div VALUES (3,4,'.00000055260225961552');
164 INSERT INTO num_exp_add VALUES (3,5,'16401.348491');
165 INSERT INTO num_exp_sub VALUES (3,5,'-16392.728491');
166 INSERT INTO num_exp_mul VALUES (3,5,'70671.23589621');
167 INSERT INTO num_exp_div VALUES (3,5,'.00026285234387695504');
168 INSERT INTO num_exp_add VALUES (3,6,'93905.88763026');
169 INSERT INTO num_exp_sub VALUES (3,6,'-93897.26763026');
170 INSERT INTO num_exp_mul VALUES (3,6,'404715.7995864206');
171 INSERT INTO num_exp_div VALUES (3,6,'.00004589912234457595');
172 INSERT INTO num_exp_add VALUES (3,7,'-83028480.69');
173 INSERT INTO num_exp_sub VALUES (3,7,'83028489.31');
174 INSERT INTO num_exp_mul VALUES (3,7,'-357852770.35');
175 INSERT INTO num_exp_div VALUES (3,7,'-.00000005190989574240');
176 INSERT INTO num_exp_add VALUES (3,8,'74885.31');
177 INSERT INTO num_exp_sub VALUES (3,8,'-74876.69');
178 INSERT INTO num_exp_mul VALUES (3,8,'322737.11');
179 INSERT INTO num_exp_div VALUES (3,8,'.00005755799201399553');
180 INSERT INTO num_exp_add VALUES (3,9,'-24926799.735047420');
181 INSERT INTO num_exp_sub VALUES (3,9,'24926808.355047420');
182 INSERT INTO num_exp_mul VALUES (3,9,'-107434525.43415438020');
183 INSERT INTO num_exp_div VALUES (3,9,'-.00000017290624149854');
184 INSERT INTO num_exp_add VALUES (4,0,'7799461.4119');
185 INSERT INTO num_exp_sub VALUES (4,0,'7799461.4119');
186 INSERT INTO num_exp_mul VALUES (4,0,'0');
187 INSERT INTO num_exp_div VALUES (4,0,'NaN');
188 INSERT INTO num_exp_add VALUES (4,1,'7799461.4119');
189 INSERT INTO num_exp_sub VALUES (4,1,'7799461.4119');
190 INSERT INTO num_exp_mul VALUES (4,1,'0');
191 INSERT INTO num_exp_div VALUES (4,1,'NaN');
192 INSERT INTO num_exp_add VALUES (4,2,'-26539030.803497047');
193 INSERT INTO num_exp_sub VALUES (4,2,'42137953.627297047');
194 INSERT INTO num_exp_mul VALUES (4,2,'-267821744976817.8111137106593');
195 INSERT INTO num_exp_div VALUES (4,2,'-.22713465002993920385');
196 INSERT INTO num_exp_add VALUES (4,3,'7799465.7219');
197 INSERT INTO num_exp_sub VALUES (4,3,'7799457.1019');
198 INSERT INTO num_exp_mul VALUES (4,3,'33615678.685289');
199 INSERT INTO num_exp_div VALUES (4,3,'1809619.81714617169373549883');
200 INSERT INTO num_exp_add VALUES (4,4,'15598922.8238');
201 INSERT INTO num_exp_sub VALUES (4,4,'0');
202 INSERT INTO num_exp_mul VALUES (4,4,'60831598315717.14146161');
203 INSERT INTO num_exp_div VALUES (4,4,'1.00000000000000000000');
204 INSERT INTO num_exp_add VALUES (4,5,'7815858.450391');
205 INSERT INTO num_exp_sub VALUES (4,5,'7783064.373409');
206 INSERT INTO num_exp_mul VALUES (4,5,'127888068979.9935054429');
207 INSERT INTO num_exp_div VALUES (4,5,'475.66281046305802686061');
208 INSERT INTO num_exp_add VALUES (4,6,'7893362.98953026');
209 INSERT INTO num_exp_sub VALUES (4,6,'7705559.83426974');
210 INSERT INTO num_exp_mul VALUES (4,6,'732381731243.745115764094');
211 INSERT INTO num_exp_div VALUES (4,6,'83.05996138436129499606');
212 INSERT INTO num_exp_add VALUES (4,7,'-75229023.5881');
213 INSERT INTO num_exp_sub VALUES (4,7,'90827946.4119');
214 INSERT INTO num_exp_mul VALUES (4,7,'-647577464846017.9715');
215 INSERT INTO num_exp_div VALUES (4,7,'-.09393717604145131637');
216 INSERT INTO num_exp_add VALUES (4,8,'7874342.4119');
217 INSERT INTO num_exp_sub VALUES (4,8,'7724580.4119');
218 INSERT INTO num_exp_mul VALUES (4,8,'584031469984.4839');
219 INSERT INTO num_exp_div VALUES (4,8,'104.15808298366741897143');
220 INSERT INTO num_exp_add VALUES (4,9,'-17127342.633147420');
221 INSERT INTO num_exp_sub VALUES (4,9,'32726265.456947420');
222 INSERT INTO num_exp_mul VALUES (4,9,'-194415646271340.1815956522980');
223 INSERT INTO num_exp_div VALUES (4,9,'-.31289456112403769409');
224 INSERT INTO num_exp_add VALUES (5,0,'16397.038491');
225 INSERT INTO num_exp_sub VALUES (5,0,'16397.038491');
226 INSERT INTO num_exp_mul VALUES (5,0,'0');
227 INSERT INTO num_exp_div VALUES (5,0,'NaN');
228 INSERT INTO num_exp_add VALUES (5,1,'16397.038491');
229 INSERT INTO num_exp_sub VALUES (5,1,'16397.038491');
230 INSERT INTO num_exp_mul VALUES (5,1,'0');
231 INSERT INTO num_exp_div VALUES (5,1,'NaN');
232 INSERT INTO num_exp_add VALUES (5,2,'-34322095.176906047');
233 INSERT INTO num_exp_sub VALUES (5,2,'34354889.253888047');
234 INSERT INTO num_exp_mul VALUES (5,2,'-563049578578.769242506736077');
235 INSERT INTO num_exp_div VALUES (5,2,'-.00047751189505192446');
236 INSERT INTO num_exp_add VALUES (5,3,'16401.348491');
237 INSERT INTO num_exp_sub VALUES (5,3,'16392.728491');
238 INSERT INTO num_exp_mul VALUES (5,3,'70671.23589621');
239 INSERT INTO num_exp_div VALUES (5,3,'3804.41728329466357308584');
240 INSERT INTO num_exp_add VALUES (5,4,'7815858.450391');
241 INSERT INTO num_exp_sub VALUES (5,4,'-7783064.373409');
242 INSERT INTO num_exp_mul VALUES (5,4,'127888068979.9935054429');
243 INSERT INTO num_exp_div VALUES (5,4,'.00210232958726897192');
244 INSERT INTO num_exp_add VALUES (5,5,'32794.076982');
245 INSERT INTO num_exp_sub VALUES (5,5,'0');
246 INSERT INTO num_exp_mul VALUES (5,5,'268862871.275335557081');
247 INSERT INTO num_exp_div VALUES (5,5,'1.00000000000000000000');
248 INSERT INTO num_exp_add VALUES (5,6,'110298.61612126');
249 INSERT INTO num_exp_sub VALUES (5,6,'-77504.53913926');
250 INSERT INTO num_exp_mul VALUES (5,6,'1539707782.76899778633766');
251 INSERT INTO num_exp_div VALUES (5,6,'.17461941433576102689');
252 INSERT INTO num_exp_add VALUES (5,7,'-83012087.961509');
253 INSERT INTO num_exp_sub VALUES (5,7,'83044882.038491');
254 INSERT INTO num_exp_mul VALUES (5,7,'-1361421264394.416135');
255 INSERT INTO num_exp_div VALUES (5,7,'-.00019748690453643710');
256 INSERT INTO num_exp_add VALUES (5,8,'91278.038491');
257 INSERT INTO num_exp_sub VALUES (5,8,'-58483.961509');
258 INSERT INTO num_exp_mul VALUES (5,8,'1227826639.244571');
259 INSERT INTO num_exp_div VALUES (5,8,'.21897461960978085228');
260 INSERT INTO num_exp_add VALUES (5,9,'-24910407.006556420');
261 INSERT INTO num_exp_sub VALUES (5,9,'24943201.083538420');
262 INSERT INTO num_exp_mul VALUES (5,9,'-408725765384.257043660243220');
263 INSERT INTO num_exp_div VALUES (5,9,'-.00065780749354660427');
264 INSERT INTO num_exp_add VALUES (6,0,'93901.57763026');
265 INSERT INTO num_exp_sub VALUES (6,0,'93901.57763026');
266 INSERT INTO num_exp_mul VALUES (6,0,'0');
267 INSERT INTO num_exp_div VALUES (6,0,'NaN');
268 INSERT INTO num_exp_add VALUES (6,1,'93901.57763026');
269 INSERT INTO num_exp_sub VALUES (6,1,'93901.57763026');
270 INSERT INTO num_exp_mul VALUES (6,1,'0');
271 INSERT INTO num_exp_div VALUES (6,1,'NaN');
272 INSERT INTO num_exp_add VALUES (6,2,'-34244590.637766787');
273 INSERT INTO num_exp_sub VALUES (6,2,'34432393.793027307');
274 INSERT INTO num_exp_mul VALUES (6,2,'-3224438592470.18449811926184222');
275 INSERT INTO num_exp_div VALUES (6,2,'-.00273458651128995823');
276 INSERT INTO num_exp_add VALUES (6,3,'93905.88763026');
277 INSERT INTO num_exp_sub VALUES (6,3,'93897.26763026');
278 INSERT INTO num_exp_mul VALUES (6,3,'404715.7995864206');
279 INSERT INTO num_exp_div VALUES (6,3,'21786.90896293735498839907');
280 INSERT INTO num_exp_add VALUES (6,4,'7893362.98953026');
281 INSERT INTO num_exp_sub VALUES (6,4,'-7705559.83426974');
282 INSERT INTO num_exp_mul VALUES (6,4,'732381731243.745115764094');
283 INSERT INTO num_exp_div VALUES (6,4,'.01203949512295682469');
284 INSERT INTO num_exp_add VALUES (6,5,'110298.61612126');
285 INSERT INTO num_exp_sub VALUES (6,5,'77504.53913926');
286 INSERT INTO num_exp_mul VALUES (6,5,'1539707782.76899778633766');
287 INSERT INTO num_exp_div VALUES (6,5,'5.72674008674192359679');
288 INSERT INTO num_exp_add VALUES (6,6,'187803.15526052');
289 INSERT INTO num_exp_sub VALUES (6,6,'0');
290 INSERT INTO num_exp_mul VALUES (6,6,'8817506281.4517452372676676');
291 INSERT INTO num_exp_div VALUES (6,6,'1.00000000000000000000');
292 INSERT INTO num_exp_add VALUES (6,7,'-82934583.42236974');
293 INSERT INTO num_exp_sub VALUES (6,7,'83122386.57763026');
294 INSERT INTO num_exp_mul VALUES (6,7,'-7796505729750.37795610');
295 INSERT INTO num_exp_div VALUES (6,7,'-.00113095617281538980');
296 INSERT INTO num_exp_add VALUES (6,8,'168782.57763026');
297 INSERT INTO num_exp_sub VALUES (6,8,'19020.57763026');
298 INSERT INTO num_exp_mul VALUES (6,8,'7031444034.53149906');
299 INSERT INTO num_exp_div VALUES (6,8,'1.25401073209839612184');
300 INSERT INTO num_exp_add VALUES (6,9,'-24832902.467417160');
301 INSERT INTO num_exp_sub VALUES (6,9,'25020705.622677680');
302 INSERT INTO num_exp_mul VALUES (6,9,'-2340666225110.29929521292692920');
303 INSERT INTO num_exp_div VALUES (6,9,'-.00376709254265256789');
304 INSERT INTO num_exp_add VALUES (7,0,'-83028485');
305 INSERT INTO num_exp_sub VALUES (7,0,'-83028485');
306 INSERT INTO num_exp_mul VALUES (7,0,'0');
307 INSERT INTO num_exp_div VALUES (7,0,'NaN');
308 INSERT INTO num_exp_add VALUES (7,1,'-83028485');
309 INSERT INTO num_exp_sub VALUES (7,1,'-83028485');
310 INSERT INTO num_exp_mul VALUES (7,1,'0');
311 INSERT INTO num_exp_div VALUES (7,1,'NaN');
312 INSERT INTO num_exp_add VALUES (7,2,'-117366977.215397047');
313 INSERT INTO num_exp_sub VALUES (7,2,'-48689992.784602953');
314 INSERT INTO num_exp_mul VALUES (7,2,'2851072985828710.485883795');
315 INSERT INTO num_exp_div VALUES (7,2,'2.41794207151503385700');
316 INSERT INTO num_exp_add VALUES (7,3,'-83028480.69');
317 INSERT INTO num_exp_sub VALUES (7,3,'-83028489.31');
318 INSERT INTO num_exp_mul VALUES (7,3,'-357852770.35');
319 INSERT INTO num_exp_div VALUES (7,3,'-19264149.65197215777262180974');
320 INSERT INTO num_exp_add VALUES (7,4,'-75229023.5881');
321 INSERT INTO num_exp_sub VALUES (7,4,'-90827946.4119');
322 INSERT INTO num_exp_mul VALUES (7,4,'-647577464846017.9715');
323 INSERT INTO num_exp_div VALUES (7,4,'-10.64541262725136247686');
324 INSERT INTO num_exp_add VALUES (7,5,'-83012087.961509');
325 INSERT INTO num_exp_sub VALUES (7,5,'-83044882.038491');
326 INSERT INTO num_exp_mul VALUES (7,5,'-1361421264394.416135');
327 INSERT INTO num_exp_div VALUES (7,5,'-5063.62688881730941836574');
328 INSERT INTO num_exp_add VALUES (7,6,'-82934583.42236974');
329 INSERT INTO num_exp_sub VALUES (7,6,'-83122386.57763026');
330 INSERT INTO num_exp_mul VALUES (7,6,'-7796505729750.37795610');
331 INSERT INTO num_exp_div VALUES (7,6,'-884.20756174009028770294');
332 INSERT INTO num_exp_add VALUES (7,7,'-166056970');
333 INSERT INTO num_exp_sub VALUES (7,7,'0');
334 INSERT INTO num_exp_mul VALUES (7,7,'6893729321395225');
335 INSERT INTO num_exp_div VALUES (7,7,'1.00000000000000000000');
336 INSERT INTO num_exp_add VALUES (7,8,'-82953604');
337 INSERT INTO num_exp_sub VALUES (7,8,'-83103366');
338 INSERT INTO num_exp_mul VALUES (7,8,'-6217255985285');
339 INSERT INTO num_exp_div VALUES (7,8,'-1108.80577182462841041118');
340 INSERT INTO num_exp_add VALUES (7,9,'-107955289.045047420');
341 INSERT INTO num_exp_sub VALUES (7,9,'-58101680.954952580');
342 INSERT INTO num_exp_mul VALUES (7,9,'2069634775752159.035758700');
343 INSERT INTO num_exp_div VALUES (7,9,'3.33089171198810413382');
344 INSERT INTO num_exp_add VALUES (8,0,'74881');
345 INSERT INTO num_exp_sub VALUES (8,0,'74881');
346 INSERT INTO num_exp_mul VALUES (8,0,'0');
347 INSERT INTO num_exp_div VALUES (8,0,'NaN');
348 INSERT INTO num_exp_add VALUES (8,1,'74881');
349 INSERT INTO num_exp_sub VALUES (8,1,'74881');
350 INSERT INTO num_exp_mul VALUES (8,1,'0');
351 INSERT INTO num_exp_div VALUES (8,1,'NaN');
352 INSERT INTO num_exp_add VALUES (8,2,'-34263611.215397047');
353 INSERT INTO num_exp_sub VALUES (8,2,'34413373.215397047');
354 INSERT INTO num_exp_mul VALUES (8,2,'-2571300635581.146276407');
355 INSERT INTO num_exp_div VALUES (8,2,'-.00218067233500788615');
356 INSERT INTO num_exp_add VALUES (8,3,'74885.31');
357 INSERT INTO num_exp_sub VALUES (8,3,'74876.69');
358 INSERT INTO num_exp_mul VALUES (8,3,'322737.11');
359 INSERT INTO num_exp_div VALUES (8,3,'17373.78190255220417633410');
360 INSERT INTO num_exp_add VALUES (8,4,'7874342.4119');
361 INSERT INTO num_exp_sub VALUES (8,4,'-7724580.4119');
362 INSERT INTO num_exp_mul VALUES (8,4,'584031469984.4839');
363 INSERT INTO num_exp_div VALUES (8,4,'.00960079113741758956');
364 INSERT INTO num_exp_add VALUES (8,5,'91278.038491');
365 INSERT INTO num_exp_sub VALUES (8,5,'58483.961509');
366 INSERT INTO num_exp_mul VALUES (8,5,'1227826639.244571');
367 INSERT INTO num_exp_div VALUES (8,5,'4.56673929509287019456');
368 INSERT INTO num_exp_add VALUES (8,6,'168782.57763026');
369 INSERT INTO num_exp_sub VALUES (8,6,'-19020.57763026');
370 INSERT INTO num_exp_mul VALUES (8,6,'7031444034.53149906');
371 INSERT INTO num_exp_div VALUES (8,6,'.79744134113322314424');
372 INSERT INTO num_exp_add VALUES (8,7,'-82953604');
373 INSERT INTO num_exp_sub VALUES (8,7,'83103366');
374 INSERT INTO num_exp_mul VALUES (8,7,'-6217255985285');
375 INSERT INTO num_exp_div VALUES (8,7,'-.00090187120721280172');
376 INSERT INTO num_exp_add VALUES (8,8,'149762');
377 INSERT INTO num_exp_sub VALUES (8,8,'0');
378 INSERT INTO num_exp_mul VALUES (8,8,'5607164161');
379 INSERT INTO num_exp_div VALUES (8,8,'1.00000000000000000000');
380 INSERT INTO num_exp_add VALUES (8,9,'-24851923.045047420');
381 INSERT INTO num_exp_sub VALUES (8,9,'25001685.045047420');
382 INSERT INTO num_exp_mul VALUES (8,9,'-1866544013697.195857020');
383 INSERT INTO num_exp_div VALUES (8,9,'-.00300403532938582735');
384 INSERT INTO num_exp_add VALUES (9,0,'-24926804.045047420');
385 INSERT INTO num_exp_sub VALUES (9,0,'-24926804.045047420');
386 INSERT INTO num_exp_mul VALUES (9,0,'0');
387 INSERT INTO num_exp_div VALUES (9,0,'NaN');
388 INSERT INTO num_exp_add VALUES (9,1,'-24926804.045047420');
389 INSERT INTO num_exp_sub VALUES (9,1,'-24926804.045047420');
390 INSERT INTO num_exp_mul VALUES (9,1,'0');
391 INSERT INTO num_exp_div VALUES (9,1,'NaN');
392 INSERT INTO num_exp_add VALUES (9,2,'-59265296.260444467');
393 INSERT INTO num_exp_sub VALUES (9,2,'9411688.170349627');
394 INSERT INTO num_exp_mul VALUES (9,2,'855948866655588.453741509242968740');
395 INSERT INTO num_exp_div VALUES (9,2,'.72591434384152961526');
396 INSERT INTO num_exp_add VALUES (9,3,'-24926799.735047420');
397 INSERT INTO num_exp_sub VALUES (9,3,'-24926808.355047420');
398 INSERT INTO num_exp_mul VALUES (9,3,'-107434525.43415438020');
399 INSERT INTO num_exp_div VALUES (9,3,'-5783481.21694835730858468677');
400 INSERT INTO num_exp_add VALUES (9,4,'-17127342.633147420');
401 INSERT INTO num_exp_sub VALUES (9,4,'-32726265.456947420');
402 INSERT INTO num_exp_mul VALUES (9,4,'-194415646271340.1815956522980');
403 INSERT INTO num_exp_div VALUES (9,4,'-3.19596478892958416484');
404 INSERT INTO num_exp_add VALUES (9,5,'-24910407.006556420');
405 INSERT INTO num_exp_sub VALUES (9,5,'-24943201.083538420');
406 INSERT INTO num_exp_mul VALUES (9,5,'-408725765384.257043660243220');
407 INSERT INTO num_exp_div VALUES (9,5,'-1520.20159364322004505807');
408 INSERT INTO num_exp_add VALUES (9,6,'-24832902.467417160');
409 INSERT INTO num_exp_sub VALUES (9,6,'-25020705.622677680');
410 INSERT INTO num_exp_mul VALUES (9,6,'-2340666225110.29929521292692920');
411 INSERT INTO num_exp_div VALUES (9,6,'-265.45671195426965751280');
412 INSERT INTO num_exp_add VALUES (9,7,'-107955289.045047420');
413 INSERT INTO num_exp_sub VALUES (9,7,'58101680.954952580');
414 INSERT INTO num_exp_mul VALUES (9,7,'2069634775752159.035758700');
415 INSERT INTO num_exp_div VALUES (9,7,'.30021990699995814689');
416 INSERT INTO num_exp_add VALUES (9,8,'-24851923.045047420');
417 INSERT INTO num_exp_sub VALUES (9,8,'-25001685.045047420');
418 INSERT INTO num_exp_mul VALUES (9,8,'-1866544013697.195857020');
419 INSERT INTO num_exp_div VALUES (9,8,'-332.88556569820675471748');
420 INSERT INTO num_exp_add VALUES (9,9,'-49853608.090094840');
421 INSERT INTO num_exp_sub VALUES (9,9,'0');
422 INSERT INTO num_exp_mul VALUES (9,9,'621345559900192.420120630048656400');
423 INSERT INTO num_exp_div VALUES (9,9,'1.00000000000000000000');
424 COMMIT TRANSACTION;
425 BEGIN TRANSACTION;
426 INSERT INTO num_exp_sqrt VALUES (0,'0');
427 INSERT INTO num_exp_sqrt VALUES (1,'0');
428 INSERT INTO num_exp_sqrt VALUES (2,'5859.90547836712524903505');
429 INSERT INTO num_exp_sqrt VALUES (3,'2.07605394920266944396');
430 INSERT INTO num_exp_sqrt VALUES (4,'2792.75158435189147418923');
431 INSERT INTO num_exp_sqrt VALUES (5,'128.05092147657509145473');
432 INSERT INTO num_exp_sqrt VALUES (6,'306.43364311096782703406');
433 INSERT INTO num_exp_sqrt VALUES (7,'9111.99676251039939975230');
434 INSERT INTO num_exp_sqrt VALUES (8,'273.64392922189960397542');
435 INSERT INTO num_exp_sqrt VALUES (9,'4992.67503899937593364766');
436 COMMIT TRANSACTION;
437 BEGIN TRANSACTION;
438 INSERT INTO num_exp_ln VALUES (0,'NaN');
439 INSERT INTO num_exp_ln VALUES (1,'NaN');
440 INSERT INTO num_exp_ln VALUES (2,'17.35177750493897715514');
441 INSERT INTO num_exp_ln VALUES (3,'1.46093790411565641971');
442 INSERT INTO num_exp_ln VALUES (4,'15.86956523951936572464');
443 INSERT INTO num_exp_ln VALUES (5,'9.70485601768871834038');
444 INSERT INTO num_exp_ln VALUES (6,'11.45000246622944403127');
445 INSERT INTO num_exp_ln VALUES (7,'18.23469429965478772991');
446 INSERT INTO num_exp_ln VALUES (8,'11.22365546576315513668');
447 INSERT INTO num_exp_ln VALUES (9,'17.03145425013166006962');
448 COMMIT TRANSACTION;
449 BEGIN TRANSACTION;
450 INSERT INTO num_exp_log10 VALUES (0,'NaN');
451 INSERT INTO num_exp_log10 VALUES (1,'NaN');
452 INSERT INTO num_exp_log10 VALUES (2,'7.53578122160797276459');
453 INSERT INTO num_exp_log10 VALUES (3,'.63447727016073160075');
454 INSERT INTO num_exp_log10 VALUES (4,'6.89206461372691743345');
455 INSERT INTO num_exp_log10 VALUES (5,'4.21476541614777768626');
456 INSERT INTO num_exp_log10 VALUES (6,'4.97267288886207207671');
457 INSERT INTO num_exp_log10 VALUES (7,'7.91922711353275546914');
458 INSERT INTO num_exp_log10 VALUES (8,'4.87437163556421004138');
459 INSERT INTO num_exp_log10 VALUES (9,'7.39666659961986567059');
460 COMMIT TRANSACTION;
461 BEGIN TRANSACTION;
462 INSERT INTO num_exp_power_10_ln VALUES (0,'NaN');
463 INSERT INTO num_exp_power_10_ln VALUES (1,'NaN');
464 INSERT INTO num_exp_power_10_ln VALUES (2,'224790267919917955.13261618583642653184');
465 INSERT INTO num_exp_power_10_ln VALUES (3,'28.90266599445155957393');
466 INSERT INTO num_exp_power_10_ln VALUES (4,'7405685069594999.07733999469386277636');
467 INSERT INTO num_exp_power_10_ln VALUES (5,'5068226527.32127265408584640098');
468 INSERT INTO num_exp_power_10_ln VALUES (6,'281839893606.99372343357047819067');
469 INSERT INTO num_exp_power_10_ln VALUES (7,'1716699575118597095.42330819910640247627');
470 INSERT INTO num_exp_power_10_ln VALUES (8,'167361463828.07491320069016125952');
471 INSERT INTO num_exp_power_10_ln VALUES (9,'107511333880052007.04141124673540337457');
472 COMMIT TRANSACTION;
473 BEGIN TRANSACTION;
474 INSERT INTO num_data VALUES (0, '0');
475 INSERT INTO num_data VALUES (1, '0');
476 INSERT INTO num_data VALUES (2, '-34338492.215397047');
477 INSERT INTO num_data VALUES (3, '4.31');
478 INSERT INTO num_data VALUES (4, '7799461.4119');
479 INSERT INTO num_data VALUES (5, '16397.038491');
480 INSERT INTO num_data VALUES (6, '93901.57763026');
481 INSERT INTO num_data VALUES (7, '-83028485');
482 INSERT INTO num_data VALUES (8, '74881');
483 INSERT INTO num_data VALUES (9, '-24926804.045047420');
484 COMMIT TRANSACTION;
485
486 -- ******************************
487 -- * Create indices for faster checks
488 -- ******************************
489
490 CREATE UNIQUE INDEX num_exp_add_idx ON num_exp_add (id1, id2);
491 CREATE UNIQUE INDEX num_exp_sub_idx ON num_exp_sub (id1, id2);
492 CREATE UNIQUE INDEX num_exp_div_idx ON num_exp_div (id1, id2);
493 CREATE UNIQUE INDEX num_exp_mul_idx ON num_exp_mul (id1, id2);
494 CREATE UNIQUE INDEX num_exp_sqrt_idx ON num_exp_sqrt (id);
495 CREATE UNIQUE INDEX num_exp_ln_idx ON num_exp_ln (id);
496 CREATE UNIQUE INDEX num_exp_log10_idx ON num_exp_log10 (id);
497 CREATE UNIQUE INDEX num_exp_power_10_ln_idx ON num_exp_power_10_ln (id);
498
499 VACUUM ANALYZE num_exp_add;
500 VACUUM ANALYZE num_exp_sub;
501 VACUUM ANALYZE num_exp_div;
502 VACUUM ANALYZE num_exp_mul;
503 VACUUM ANALYZE num_exp_sqrt;
504 VACUUM ANALYZE num_exp_ln;
505 VACUUM ANALYZE num_exp_log10;
506 VACUUM ANALYZE num_exp_power_10_ln;
507
508 -- ******************************
509 -- * Now check the behaviour of the NUMERIC type
510 -- ******************************
511
512 -- ******************************
513 -- * Addition check
514 -- ******************************
515 DELETE FROM num_result;
516 INSERT INTO num_result SELECT t1.id, t2.id, t1.val + t2.val
517     FROM num_data t1, num_data t2;
518 SELECT t1.id1, t1.id2, t1.result, t2.expected
519     FROM num_result t1, num_exp_add t2
520     WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2
521     AND t1.result != t2.expected;
522
523 DELETE FROM num_result;
524 INSERT INTO num_result SELECT t1.id, t2.id, round(t1.val + t2.val, 10)
525     FROM num_data t1, num_data t2;
526 SELECT t1.id1, t1.id2, t1.result, round(t2.expected, 10) as expected
527     FROM num_result t1, num_exp_add t2
528     WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2
529     AND t1.result != round(t2.expected, 10);
530
531 -- ******************************
532 -- * Subtraction check
533 -- ******************************
534 DELETE FROM num_result;
535 INSERT INTO num_result SELECT t1.id, t2.id, t1.val - t2.val
536     FROM num_data t1, num_data t2;
537 SELECT t1.id1, t1.id2, t1.result, t2.expected
538     FROM num_result t1, num_exp_sub t2
539     WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2
540     AND t1.result != t2.expected;
541
542 DELETE FROM num_result;
543 INSERT INTO num_result SELECT t1.id, t2.id, round(t1.val - t2.val, 40)
544     FROM num_data t1, num_data t2;
545 SELECT t1.id1, t1.id2, t1.result, round(t2.expected, 40)
546     FROM num_result t1, num_exp_sub t2
547     WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2
548     AND t1.result != round(t2.expected, 40);
549
550 -- ******************************
551 -- * Multiply check
552 -- ******************************
553 DELETE FROM num_result;
554 INSERT INTO num_result SELECT t1.id, t2.id, t1.val * t2.val
555     FROM num_data t1, num_data t2;
556 SELECT t1.id1, t1.id2, t1.result, t2.expected
557     FROM num_result t1, num_exp_mul t2
558     WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2
559     AND t1.result != t2.expected;
560
561 DELETE FROM num_result;
562 INSERT INTO num_result SELECT t1.id, t2.id, round(t1.val * t2.val, 30)
563     FROM num_data t1, num_data t2;
564 SELECT t1.id1, t1.id2, t1.result, round(t2.expected, 30) as expected
565     FROM num_result t1, num_exp_mul t2
566     WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2
567     AND t1.result != round(t2.expected, 30);
568
569 -- ******************************
570 -- * Division check
571 -- ******************************
572 DELETE FROM num_result;
573 INSERT INTO num_result SELECT t1.id, t2.id, t1.val / t2.val
574     FROM num_data t1, num_data t2
575     WHERE t2.val != '0.0';
576 SELECT t1.id1, t1.id2, t1.result, t2.expected
577     FROM num_result t1, num_exp_div t2
578     WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2
579     AND t1.result != t2.expected;
580
581 DELETE FROM num_result;
582 INSERT INTO num_result SELECT t1.id, t2.id, round(t1.val / t2.val, 80)
583     FROM num_data t1, num_data t2
584     WHERE t2.val != '0.0';
585 SELECT t1.id1, t1.id2, t1.result, round(t2.expected, 80) as expected
586     FROM num_result t1, num_exp_div t2
587     WHERE t1.id1 = t2.id1 AND t1.id2 = t2.id2
588     AND t1.result != round(t2.expected, 80);
589
590 -- ******************************
591 -- * Square root check
592 -- ******************************
593 DELETE FROM num_result;
594 INSERT INTO num_result SELECT id, 0, SQRT(ABS(val))
595     FROM num_data;
596 SELECT t1.id1, t1.result, t2.expected
597     FROM num_result t1, num_exp_sqrt t2
598     WHERE t1.id1 = t2.id
599     AND t1.result != t2.expected;
600
601 -- ******************************
602 -- * Natural logarithm check
603 -- ******************************
604 DELETE FROM num_result;
605 INSERT INTO num_result SELECT id, 0, LN(ABS(val))
606     FROM num_data
607     WHERE val != '0.0';
608 SELECT t1.id1, t1.result, t2.expected
609     FROM num_result t1, num_exp_ln t2
610     WHERE t1.id1 = t2.id
611     AND t1.result != t2.expected;
612
613 -- ******************************
614 -- * Logarithm base 10 check
615 -- ******************************
616 DELETE FROM num_result;
617 INSERT INTO num_result SELECT id, 0, LOG(numeric '10', ABS(val))
618     FROM num_data
619     WHERE val != '0.0';
620 SELECT t1.id1, t1.result, t2.expected
621     FROM num_result t1, num_exp_log10 t2
622     WHERE t1.id1 = t2.id
623     AND t1.result != t2.expected;
624
625 -- ******************************
626 -- * POWER(10, LN(value)) check
627 -- ******************************
628 DELETE FROM num_result;
629 INSERT INTO num_result SELECT id, 0, POWER(numeric '10', LN(ABS(round(val,200))))
630     FROM num_data
631     WHERE val != '0.0';
632 SELECT t1.id1, t1.result, t2.expected
633     FROM num_result t1, num_exp_power_10_ln t2
634     WHERE t1.id1 = t2.id
635     AND t1.result != t2.expected;
636
637 -- ******************************
638 -- * miscellaneous checks for things that have been broken in the past...
639 -- ******************************
640 -- numeric AVG used to fail on some platforms
641 SELECT AVG(val) FROM num_data;
642 SELECT STDDEV(val) FROM num_data;
643 SELECT VARIANCE(val) FROM num_data;
644
645 -- Check for appropriate rounding and overflow
646 CREATE TABLE fract_only (id int, val numeric(4,4));
647 INSERT INTO fract_only VALUES (1, '0.0');
648 INSERT INTO fract_only VALUES (2, '0.1');
649 INSERT INTO fract_only VALUES (3, '1.0');       -- should fail
650 INSERT INTO fract_only VALUES (4, '-0.9999');
651 INSERT INTO fract_only VALUES (5, '0.99994');
652 INSERT INTO fract_only VALUES (6, '0.99995');  -- should fail
653 INSERT INTO fract_only VALUES (7, '0.00001');
654 INSERT INTO fract_only VALUES (8, '0.00017');
655 SELECT * FROM fract_only;
656 DROP TABLE fract_only;
657
658 -- Simple check that ceil(), floor(), and round() work correctly
659 CREATE TABLE ceil_floor_round (a numeric);
660 INSERT INTO ceil_floor_round VALUES ('-5.5');
661 INSERT INTO ceil_floor_round VALUES ('-5.499999');
662 INSERT INTO ceil_floor_round VALUES ('9.5');
663 INSERT INTO ceil_floor_round VALUES ('9.4999999');
664 INSERT INTO ceil_floor_round VALUES ('0.0');
665 INSERT INTO ceil_floor_round VALUES ('0.0000001');
666 INSERT INTO ceil_floor_round VALUES ('-0.000001');
667 SELECT a, ceil(a), ceiling(a), floor(a), round(a) FROM ceil_floor_round;
668 DROP TABLE ceil_floor_round;
669
670 -- Testing for width_bucket(). For convenience, we test both the
671 -- numeric and float8 versions of the function in this file.
672
673 -- errors
674 SELECT width_bucket(5.0, 3.0, 4.0, 0);
675 SELECT width_bucket(5.0, 3.0, 4.0, -5);
676 SELECT width_bucket(3.5, 3.0, 3.0, 888);
677 SELECT width_bucket(5.0::float8, 3.0::float8, 4.0::float8, 0);
678 SELECT width_bucket(5.0::float8, 3.0::float8, 4.0::float8, -5);
679 SELECT width_bucket(3.5::float8, 3.0::float8, 3.0::float8, 888);
680 SELECT width_bucket('NaN', 3.0, 4.0, 888);
681 SELECT width_bucket(0::float8, 'NaN', 4.0::float8, 888);
682
683 -- normal operation
684 CREATE TABLE width_bucket_test (operand_num numeric, operand_f8 float8);
685
686 COPY width_bucket_test (operand_num) FROM stdin;
687 -5.2
688 -0.0000000001
689 0.000000000001
690 1
691 1.99999999999999
692 2
693 2.00000000000001
694 3
695 4
696 4.5
697 5
698 5.5
699 6
700 7
701 8
702 9
703 9.99999999999999
704 10
705 10.0000000000001
706 \.
707
708 UPDATE width_bucket_test SET operand_f8 = operand_num::float8;
709
710 SELECT
711     operand_num,
712     width_bucket(operand_num, 0, 10, 5) AS wb_1,
713     width_bucket(operand_f8, 0, 10, 5) AS wb_1f,
714     width_bucket(operand_num, 10, 0, 5) AS wb_2,
715     width_bucket(operand_f8, 10, 0, 5) AS wb_2f,
716     width_bucket(operand_num, 2, 8, 4) AS wb_3,
717     width_bucket(operand_f8, 2, 8, 4) AS wb_3f,
718     width_bucket(operand_num, 5.0, 5.5, 20) AS wb_4,
719     width_bucket(operand_f8, 5.0, 5.5, 20) AS wb_4f,
720     width_bucket(operand_num, -25, 25, 10) AS wb_5,
721     width_bucket(operand_f8, -25, 25, 10) AS wb_5f
722     FROM width_bucket_test;
723
724 -- for float8 only, check positive and negative infinity: we require
725 -- finite bucket bounds, but allow an infinite operand
726 SELECT width_bucket(0.0::float8, 'Infinity'::float8, 5, 10); -- error
727 SELECT width_bucket(0.0::float8, 5, '-Infinity'::float8, 20); -- error
728 SELECT width_bucket('Infinity'::float8, 1, 10, 10),
729        width_bucket('-Infinity'::float8, 1, 10, 10);
730
731 DROP TABLE width_bucket_test;
732
733 -- TO_CHAR()
734 --
735 SELECT '' AS to_char_1, to_char(val, '9G999G999G999G999G999') 
736         FROM num_data;
737
738 SELECT '' AS to_char_2, to_char(val, '9G999G999G999G999G999D999G999G999G999G999')
739         FROM num_data;
740
741 SELECT '' AS to_char_3, to_char(val, '9999999999999999.999999999999999PR')
742         FROM num_data;
743
744 SELECT '' AS to_char_4, to_char(val, '9999999999999999.999999999999999S')
745         FROM num_data;
746
747 SELECT '' AS to_char_5,  to_char(val, 'MI9999999999999999.999999999999999')     FROM num_data;  
748 SELECT '' AS to_char_6,  to_char(val, 'FMS9999999999999999.999999999999999')    FROM num_data;
749 SELECT '' AS to_char_7,  to_char(val, 'FM9999999999999999.999999999999999THPR') FROM num_data;
750 SELECT '' AS to_char_8,  to_char(val, 'SG9999999999999999.999999999999999th')   FROM num_data;  
751 SELECT '' AS to_char_9,  to_char(val, '0999999999999999.999999999999999')       FROM num_data;  
752 SELECT '' AS to_char_10, to_char(val, 'S0999999999999999.999999999999999')      FROM num_data;  
753 SELECT '' AS to_char_11, to_char(val, 'FM0999999999999999.999999999999999')     FROM num_data;  
754 SELECT '' AS to_char_12, to_char(val, 'FM9999999999999999.099999999999999')     FROM num_data;
755 SELECT '' AS to_char_13, to_char(val, 'FM9999999999990999.990999999999999')     FROM num_data;
756 SELECT '' AS to_char_14, to_char(val, 'FM0999999999999999.999909999999999')     FROM num_data;
757 SELECT '' AS to_char_15, to_char(val, 'FM9999999990999999.099999999999999')     FROM num_data;
758 SELECT '' AS to_char_16, to_char(val, 'L9999999999999999.099999999999999')      FROM num_data;  
759 SELECT '' AS to_char_17, to_char(val, 'FM9999999999999999.99999999999999')      FROM num_data;
760 SELECT '' AS to_char_18, to_char(val, 'S 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9') FROM num_data;
761 SELECT '' AS to_char_19, to_char(val, 'FMS 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9') FROM num_data;
762 SELECT '' AS to_char_20, to_char(val, E'99999 "text" 9999 "9999" 999 "\\"text between quote marks\\"" 9999') FROM num_data;
763 SELECT '' AS to_char_21, to_char(val, '999999SG9999999999')                     FROM num_data;
764 SELECT '' AS to_char_22, to_char(val, 'FM9999999999999999.999999999999999')     FROM num_data;
765
766 -- TO_NUMBER()
767 --
768 SELECT '' AS to_number_1,  to_number('-34,338,492', '99G999G999');
769 SELECT '' AS to_number_2,  to_number('-34,338,492.654,878', '99G999G999D999G999');
770 SELECT '' AS to_number_3,  to_number('<564646.654564>', '999999.999999PR');
771 SELECT '' AS to_number_4,  to_number('0.00001-', '9.999999S');
772 SELECT '' AS to_number_5,  to_number('5.01-', 'FM9.999999S');
773 SELECT '' AS to_number_5,  to_number('5.01-', 'FM9.999999MI');
774 SELECT '' AS to_number_7,  to_number('5 4 4 4 4 8 . 7 8', '9 9 9 9 9 9 . 9 9');
775 SELECT '' AS to_number_8,  to_number('.01', 'FM9.99');
776 SELECT '' AS to_number_9,  to_number('.0', '99999999.99999999');
777 SELECT '' AS to_number_10, to_number('0', '99.99');
778 SELECT '' AS to_number_11, to_number('.-01', 'S99.99');
779 SELECT '' AS to_number_12, to_number('.01-', '99.99S');
780 SELECT '' AS to_number_13, to_number(' . 0 1-', ' 9 9 . 9 9 S');
781
782 --
783 -- Input syntax
784 --
785
786 CREATE TABLE num_input_test (n1 numeric);
787
788 -- good inputs
789 INSERT INTO num_input_test(n1) VALUES (' 123');
790 INSERT INTO num_input_test(n1) VALUES ('   3245874    ');
791 INSERT INTO num_input_test(n1) VALUES ('  -93853');
792 INSERT INTO num_input_test(n1) VALUES ('555.50');
793 INSERT INTO num_input_test(n1) VALUES ('-555.50');
794 INSERT INTO num_input_test(n1) VALUES ('NaN ');
795 INSERT INTO num_input_test(n1) VALUES ('        nan');
796
797 -- bad inputs
798 INSERT INTO num_input_test(n1) VALUES ('     ');
799 INSERT INTO num_input_test(n1) VALUES ('   1234   %');
800 INSERT INTO num_input_test(n1) VALUES ('xyz');
801 INSERT INTO num_input_test(n1) VALUES ('- 1234');
802 INSERT INTO num_input_test(n1) VALUES ('5 . 0');
803 INSERT INTO num_input_test(n1) VALUES ('5. 0   ');
804 INSERT INTO num_input_test(n1) VALUES ('');
805 INSERT INTO num_input_test(n1) VALUES (' N aN ');
806
807 SELECT * FROM num_input_test;
808
809 --
810 -- Test some corner cases for division
811 --
812
813 select 999999999999999999999::numeric/1000000000000000000000;
814 select div(999999999999999999999::numeric,1000000000000000000000);
815 select mod(999999999999999999999::numeric,1000000000000000000000);
816 select div(-9999999999999999999999::numeric,1000000000000000000000);
817 select mod(-9999999999999999999999::numeric,1000000000000000000000);
818 select div(-9999999999999999999999::numeric,1000000000000000000000)*1000000000000000000000 + mod(-9999999999999999999999::numeric,1000000000000000000000);
819 select mod (70.0,70) ;
820 select div (70.0,70) ;
821 select 70.0 / 70 ;
822 select 12345678901234567890 % 123;
823 select 12345678901234567890 / 123;
824 select div(12345678901234567890, 123);
825 select div(12345678901234567890, 123) * 123 + 12345678901234567890 % 123;