blob: 726f470bcc16cf261c0b6aa9797f6af861247313 [file] [log] [blame]
drhbeb9def2020-06-22 19:12:23 +00001# 2017 December 9
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#
12
13set testdir [file dirname $argv0]
14source $testdir/tester.tcl
15set testprefix decimal
16
17if {[catch {load_static_extension db decimal} error]} {
18 puts "Skipping zipfile tests, hit load error: $error"
19 finish_test; return
20}
21
22do_execsql_test 1000 {
23 SELECT decimal(1);
24} {1}
25do_execsql_test 1010 {
26 SELECT decimal(1.0);
27} {1.0}
28do_execsql_test 1020 {
29 SELECT decimal(0001.0);
30} {1.0}
31do_execsql_test 1030 {
32 SELECT decimal(+0001.0);
33} {1.0}
34do_execsql_test 1040 {
35 SELECT decimal(-0001.0);
36} {-1.0}
37do_execsql_test 1050 {
38 SELECT decimal(1.0e72);
39} {1000000000000000000000000000000000000000000000000000000000000000000000000}
40# 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123
41do_execsql_test 1060 {
42 SELECT decimal(1.0e-72);
43} {0.0000000000000000000000000000000000000000000000000000000000000000000000010}
44# 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123
45do_execsql_test 1070 {
46 SELECT decimal(-123e-4);
47} {-0.0123}
48do_execsql_test 1080 {
49 SELECT decimal(+123e+4);
50} {1230000.0}
51
52
53do_execsql_test 2000 {
54 CREATE TABLE t1(seq INTEGER PRIMARY KEY, val TEXT);
55 INSERT INTO t1 VALUES
56 (1, '-9999e99'),
57 (2, '-9998.000e+99'),
58 (3, '-9999.0'),
59 (4, '-1'),
60 (5, '-9999e-20'),
61 (6, '0'),
62 (7, '1e-30'),
63 (8, '1e-29'),
64 (9, '1'),
65 (10,'1.00000000000000001'),
66 (11,'+1.00001'),
67 (12,'99e+99');
68 SELECT *, '|'
69 FROM t1 AS a, t1 AS b
70 WHERE a.seq<b.seq
71 AND decimal_cmp(a.val,b.val)>=0;
72} {}
73do_execsql_test 2010 {
74 SELECT *, '|'
75 FROM t1 AS a, t1 AS b
76 WHERE a.seq<>b.seq
77 AND decimal_cmp(a.val,b.val)==0;
78} {}
79do_execsql_test 2020 {
80 SELECT *, '|'
81 FROM t1 AS a, t1 AS b
82 WHERE a.seq>b.seq
83 AND decimal_cmp(a.val,b.val)<=0;
84} {}
85do_execsql_test 2030 {
86 SELECT seq FROM t1 ORDER BY val COLLATE decimal;
87} {1 2 3 4 5 6 7 8 9 10 11 12}
88do_execsql_test 2040 {
89 SELECT seq FROM t1 ORDER BY val COLLATE decimal DESC;
90} {12 11 10 9 8 7 6 5 4 3 2 1}
91
92do_execsql_test 3000 {
93 CREATE TABLE t3(seq INTEGER PRIMARY KEY, val TEXT);
94 WITH RECURSIVE c(x) AS (VALUES(1) UNION SELECT x+1 FROM c WHERE x<10)
95 INSERT INTO t3(seq, val) SELECT x, x FROM c;
96 WITH RECURSIVE c(x) AS (VALUES(1) UNION SELECT x+1 FROM c WHERE x<5)
97 INSERT INTO t3(seq, val) SELECT x+10, x*1000 FROM c;
98 SELECT decimal(val) FROM t3 ORDER BY seq;
99} {1 2 3 4 5 6 7 8 9 10 1000 2000 3000 4000 5000}
100do_execsql_test 3020 {
101 SELECT decimal_add(val,'0.5') FROM t3 WHERE seq>5 ORDER BY seq
102} {6.5 7.5 8.5 9.5 10.5 1000.5 2000.5 3000.5 4000.5 5000.5}
103do_execsql_test 3030 {
104 SELECT decimal_add(val,'-10') FROM t3 ORDER BY seq;
105} {-9 -8 -7 -6 -5 -4 -3 -2 -1 0 990 1990 2990 3990 4990}
106
107do_execsql_test 4000 {
108 SELECT decimal_sum(val) FROM t3;
109} {15055}
110do_execsql_test 4010 {
111 SELECT decimal_sum(decimal_add(val,val||'e+10')) FROM t3;
112} {150550000015055}
113do_execsql_test 4010 {
114 SELECT decimal_sum(decimal_add(val||'e+20',decimal_add(val,val||'e-20')))
115 FROM t3;
116} {1505500000000000000015055.00000000000000015055}
117
drh427af8d2020-06-22 21:25:37 +0000118do_execsql_test 5000 {
119 WITH RECURSIVE c(x,y,z) AS (
120 VALUES(0,'1','1')
121 UNION ALL
122 SELECT x+1, decimal_mul(y,'2'), decimal_mul(z,'0.5')
123 FROM c WHERE x<32
124 )
125 SELECT count(*) FROM c WHERE decimal_mul(y,z)='1';
126} {33}
127
drhbeb9def2020-06-22 19:12:23 +0000128finish_test