mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-30 19:03:16 +03:00
An extension for doing decimal arithmetic on strings.
FossilOrigin-Name: 4c3b85607feb53462ccc8b89bea699fdb132c402eae597afa33cc40a85c32329
This commit is contained in:
118
test/decimal.test
Normal file
118
test/decimal.test
Normal file
@ -0,0 +1,118 @@
|
||||
# 2017 December 9
|
||||
#
|
||||
# The author disclaims copyright to this source code. In place of
|
||||
# a legal notice, here is a blessing:
|
||||
#
|
||||
# May you do good and not evil.
|
||||
# May you find forgiveness for yourself and forgive others.
|
||||
# May you share freely, never taking more than you give.
|
||||
#
|
||||
#***********************************************************************
|
||||
#
|
||||
|
||||
set testdir [file dirname $argv0]
|
||||
source $testdir/tester.tcl
|
||||
set testprefix decimal
|
||||
|
||||
if {[catch {load_static_extension db decimal} error]} {
|
||||
puts "Skipping zipfile tests, hit load error: $error"
|
||||
finish_test; return
|
||||
}
|
||||
|
||||
do_execsql_test 1000 {
|
||||
SELECT decimal(1);
|
||||
} {1}
|
||||
do_execsql_test 1010 {
|
||||
SELECT decimal(1.0);
|
||||
} {1.0}
|
||||
do_execsql_test 1020 {
|
||||
SELECT decimal(0001.0);
|
||||
} {1.0}
|
||||
do_execsql_test 1030 {
|
||||
SELECT decimal(+0001.0);
|
||||
} {1.0}
|
||||
do_execsql_test 1040 {
|
||||
SELECT decimal(-0001.0);
|
||||
} {-1.0}
|
||||
do_execsql_test 1050 {
|
||||
SELECT decimal(1.0e72);
|
||||
} {1000000000000000000000000000000000000000000000000000000000000000000000000}
|
||||
# 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123
|
||||
do_execsql_test 1060 {
|
||||
SELECT decimal(1.0e-72);
|
||||
} {0.0000000000000000000000000000000000000000000000000000000000000000000000010}
|
||||
# 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123
|
||||
do_execsql_test 1070 {
|
||||
SELECT decimal(-123e-4);
|
||||
} {-0.0123}
|
||||
do_execsql_test 1080 {
|
||||
SELECT decimal(+123e+4);
|
||||
} {1230000.0}
|
||||
|
||||
|
||||
do_execsql_test 2000 {
|
||||
CREATE TABLE t1(seq INTEGER PRIMARY KEY, val TEXT);
|
||||
INSERT INTO t1 VALUES
|
||||
(1, '-9999e99'),
|
||||
(2, '-9998.000e+99'),
|
||||
(3, '-9999.0'),
|
||||
(4, '-1'),
|
||||
(5, '-9999e-20'),
|
||||
(6, '0'),
|
||||
(7, '1e-30'),
|
||||
(8, '1e-29'),
|
||||
(9, '1'),
|
||||
(10,'1.00000000000000001'),
|
||||
(11,'+1.00001'),
|
||||
(12,'99e+99');
|
||||
SELECT *, '|'
|
||||
FROM t1 AS a, t1 AS b
|
||||
WHERE a.seq<b.seq
|
||||
AND decimal_cmp(a.val,b.val)>=0;
|
||||
} {}
|
||||
do_execsql_test 2010 {
|
||||
SELECT *, '|'
|
||||
FROM t1 AS a, t1 AS b
|
||||
WHERE a.seq<>b.seq
|
||||
AND decimal_cmp(a.val,b.val)==0;
|
||||
} {}
|
||||
do_execsql_test 2020 {
|
||||
SELECT *, '|'
|
||||
FROM t1 AS a, t1 AS b
|
||||
WHERE a.seq>b.seq
|
||||
AND decimal_cmp(a.val,b.val)<=0;
|
||||
} {}
|
||||
do_execsql_test 2030 {
|
||||
SELECT seq FROM t1 ORDER BY val COLLATE decimal;
|
||||
} {1 2 3 4 5 6 7 8 9 10 11 12}
|
||||
do_execsql_test 2040 {
|
||||
SELECT seq FROM t1 ORDER BY val COLLATE decimal DESC;
|
||||
} {12 11 10 9 8 7 6 5 4 3 2 1}
|
||||
|
||||
do_execsql_test 3000 {
|
||||
CREATE TABLE t3(seq INTEGER PRIMARY KEY, val TEXT);
|
||||
WITH RECURSIVE c(x) AS (VALUES(1) UNION SELECT x+1 FROM c WHERE x<10)
|
||||
INSERT INTO t3(seq, val) SELECT x, x FROM c;
|
||||
WITH RECURSIVE c(x) AS (VALUES(1) UNION SELECT x+1 FROM c WHERE x<5)
|
||||
INSERT INTO t3(seq, val) SELECT x+10, x*1000 FROM c;
|
||||
SELECT decimal(val) FROM t3 ORDER BY seq;
|
||||
} {1 2 3 4 5 6 7 8 9 10 1000 2000 3000 4000 5000}
|
||||
do_execsql_test 3020 {
|
||||
SELECT decimal_add(val,'0.5') FROM t3 WHERE seq>5 ORDER BY seq
|
||||
} {6.5 7.5 8.5 9.5 10.5 1000.5 2000.5 3000.5 4000.5 5000.5}
|
||||
do_execsql_test 3030 {
|
||||
SELECT decimal_add(val,'-10') FROM t3 ORDER BY seq;
|
||||
} {-9 -8 -7 -6 -5 -4 -3 -2 -1 0 990 1990 2990 3990 4990}
|
||||
|
||||
do_execsql_test 4000 {
|
||||
SELECT decimal_sum(val) FROM t3;
|
||||
} {15055}
|
||||
do_execsql_test 4010 {
|
||||
SELECT decimal_sum(decimal_add(val,val||'e+10')) FROM t3;
|
||||
} {150550000015055}
|
||||
do_execsql_test 4010 {
|
||||
SELECT decimal_sum(decimal_add(val||'e+20',decimal_add(val,val||'e-20')))
|
||||
FROM t3;
|
||||
} {1505500000000000000015055.00000000000000015055}
|
||||
|
||||
finish_test
|
Reference in New Issue
Block a user