10c8f4038Sdrh# 2019-05-03 20c8f4038Sdrh# 30c8f4038Sdrh# The author disclaims copyright to this source code. In place of 40c8f4038Sdrh# a legal notice, here is a blessing: 50c8f4038Sdrh# 60c8f4038Sdrh# May you do good and not evil. 70c8f4038Sdrh# May you find forgiveness for yourself and forgive others. 80c8f4038Sdrh# May you share freely, never taking more than you give. 90c8f4038Sdrh# 100c8f4038Sdrh#*********************************************************************** 110c8f4038Sdrh# Tests to exercise the MEM_IntReal representation of Mem objects. 120c8f4038Sdrh# 130c8f4038Sdrhset testdir [file dirname $argv0] 140c8f4038Sdrhsource $testdir/tester.tcl 150c8f4038Sdrhset ::testprefix intreal 160c8f4038Sdrh 170c8f4038Sdrhsqlite3_create_function db 180c8f4038Sdrhdo_execsql_test 100 { 190c8f4038Sdrh SELECT intreal(5); 200c8f4038Sdrh} {5.0} 210c8f4038Sdrhdo_execsql_test 110 { 220c8f4038Sdrh SELECT intreal(5)=5, 6=intreal(6); 230c8f4038Sdrh} {1 1} 240c8f4038Sdrhdo_execsql_test 120 { 250c8f4038Sdrh SELECT intreal(7)=7.0, 8.0=intreal(8); 260c8f4038Sdrh} {1 1} 270c8f4038Sdrhdo_execsql_test 130 { 280c8f4038Sdrh SELECT typeof(intreal(9)); 290c8f4038Sdrh} {real} 300c8f4038Sdrhdo_execsql_test 140 { 310c8f4038Sdrh SELECT 'a'||intreal(11)||'z'; 320c8f4038Sdrh} {a11.0z} 330c8f4038Sdrh 340c8f4038Sdrhdo_execsql_test 150 { 350c8f4038Sdrh SELECT max(1.0,intreal(2),3.0), max(1,intreal(2),3); 360c8f4038Sdrh} {3.0 3} 370c8f4038Sdrhdo_execsql_test 160 { 380c8f4038Sdrh SELECT max(1.0,intreal(4),3.0), max(1,intreal(4),3); 390c8f4038Sdrh} {4.0 4.0} 400c8f4038Sdrhdo_execsql_test 170 { 410c8f4038Sdrh SELECT max(1.0,intreal(2),intreal(3),4.0), 420c8f4038Sdrh max(1,intreal(2),intreal(3),4); 430c8f4038Sdrh} {4.0 4} 440c8f4038Sdrhdo_execsql_test 180 { 450c8f4038Sdrh SELECT max(1.0,intreal(5),intreal(3),4.0), 460c8f4038Sdrh max(1,intreal(5),intreal(3),4); 470c8f4038Sdrh} {5.0 5.0} 480c8f4038Sdrh 49be812624Sdan#------------------------------------------------------------------------- 50be812624Sdando_execsql_test 2.1 { 51be812624Sdan CREATE TABLE t2(a REAL); 52be812624Sdan INSERT INTO t2 VALUES( 836627109860825358 ); 53be812624Sdan SELECT substr(a,1,4) FROM t2 WHERE a = CAST(836627109860825358 AS REAL); 54be812624Sdan} {8.36} 550c8f4038Sdrh 56be812624Sdando_execsql_test 2.2 { 57be812624Sdan CREATE INDEX i2 ON t2(a); 58be812624Sdan SELECT substr(a,1,4) FROM t2 WHERE a = CAST(836627109860825358 AS REAL); 59be812624Sdan} {8.36} 60be812624Sdan 61be812624Sdando_execsql_test 2.3 { 62be812624Sdan CREATE TABLE t0 (c0); 63be812624Sdan CREATE TABLE t1 (c1 REAL); 64be812624Sdan INSERT INTO t1(c1) VALUES (8366271098608253588); 65be812624Sdan INSERT INTO t0(c0) VALUES ('a'); 66be812624Sdan} 67be812624Sdanset D [db one {SELECT c1 FROM t1}] 68be812624Sdan 69be812624Sdando_execsql_test 2.4 { 70be812624Sdan SELECT * FROM t1 WHERE (t1.c1 = CAST(8366271098608253588 AS REAL)); 71be812624Sdan} $D 72be812624Sdan 73be812624Sdando_execsql_test 2.5 { 74be812624Sdan SELECT * FROM t0, t1 WHERE (t1.c1 = CAST(8366271098608253588 AS REAL)); 75be812624Sdan} [list a $D] 76be812624Sdan 77be812624Sdando_execsql_test 2.6 { 78be812624Sdan SELECT * FROM t0, t1 79be812624Sdan WHERE ( 80be812624Sdan t1.c1 >= CAST(8366271098608253588 AS REAL) 81be812624Sdan AND t1.c1 <= CAST(8366271098608253588 AS REAL) 82be812624Sdan ); 83be812624Sdan} [list a $D] 840c8f4038Sdrh 85*337cc399Sdrh# 2019-07-29 ticket ba2f4585cf495231 86*337cc399Sdrh# 87*337cc399Sdrhdb close 88*337cc399Sdrhsqlite3 db :memory: 89*337cc399Sdrhdo_execsql_test 3.0 { 90*337cc399Sdrh CREATE TABLE t0 (c0 REAL, c1); 91*337cc399Sdrh CREATE UNIQUE INDEX i0 ON t0(c1, 0 | c0); 92*337cc399Sdrh INSERT INTO t0(c0) VALUES (4750228396194493326), (0); 93*337cc399Sdrh UPDATE OR REPLACE t0 SET c0 = 'a', c1 = ''; 94*337cc399Sdrh SELECT * FROM t0 ORDER BY t0.c1; 95*337cc399Sdrh PRAGMA integrity_check; 96*337cc399Sdrh} {a {} ok} 970c8f4038Sdrh 980c8f4038Sdrhfinish_test 99