169f3d048Smistachkin# 2013 March 10 269f3d048Smistachkin# 369f3d048Smistachkin# The author disclaims copyright to this source code. In place of 469f3d048Smistachkin# a legal notice, here is a blessing: 569f3d048Smistachkin# 669f3d048Smistachkin# May you do good and not evil. 769f3d048Smistachkin# May you find forgiveness for yourself and forgive others. 869f3d048Smistachkin# May you share freely, never taking more than you give. 969f3d048Smistachkin# 1069f3d048Smistachkin#*********************************************************************** 11a17713ffSmistachkin# This file implements regression tests for SQLite library. The focus of 12a17713ffSmistachkin# this file is testing the tointeger() and toreal() functions. 13a17713ffSmistachkin# 14a17713ffSmistachkin# Several of the toreal() tests are disabled on platforms where floating 15a17713ffSmistachkin# point precision is not high enough to represent their constant integer 16a17713ffSmistachkin# expression arguments as double precision floating point values. 1769f3d048Smistachkin# 1869f3d048Smistachkinset testdir [file dirname $argv0] 1969f3d048Smistachkinsource $testdir/tester.tcl 2098ab33a8Smistachkinset saved_tcl_precision $tcl_precision 2198ab33a8Smistachkinset tcl_precision 0 225f8cdac6Sdrhload_static_extension db totype 2369f3d048Smistachkin 24aeddf19eSmistachkinset highPrecision(1) [expr \ 255f8cdac6Sdrh {[db eval {SELECT tointeger(9223372036854775807 + 1);}] eq {{}}}] 26aeddf19eSmistachkin 270057a746Sdrhdo_execsql_test func4-1.1 { 2869f3d048Smistachkin SELECT tointeger(NULL); 2969f3d048Smistachkin} {{}} 300057a746Sdrhdo_execsql_test func4-1.2 { 3169f3d048Smistachkin SELECT tointeger(''); 3269f3d048Smistachkin} {{}} 330057a746Sdrhdo_execsql_test func4-1.3 { 3469f3d048Smistachkin SELECT tointeger(' '); 3569f3d048Smistachkin} {{}} 360057a746Sdrhdo_execsql_test func4-1.4 { 3769f3d048Smistachkin SELECT tointeger('1234'); 3869f3d048Smistachkin} {1234} 390057a746Sdrhdo_execsql_test func4-1.5 { 4069f3d048Smistachkin SELECT tointeger(' 1234'); 4198ab33a8Smistachkin} {{}} 420057a746Sdrhdo_execsql_test func4-1.6 { 4369f3d048Smistachkin SELECT tointeger('bad'); 4469f3d048Smistachkin} {{}} 450057a746Sdrhdo_execsql_test func4-1.7 { 4669f3d048Smistachkin SELECT tointeger('0xBAD'); 4769f3d048Smistachkin} {{}} 480057a746Sdrhdo_execsql_test func4-1.8 { 4969f3d048Smistachkin SELECT tointeger('123BAD'); 5069f3d048Smistachkin} {{}} 510057a746Sdrhdo_execsql_test func4-1.9 { 5269f3d048Smistachkin SELECT tointeger('0x123BAD'); 5369f3d048Smistachkin} {{}} 540057a746Sdrhdo_execsql_test func4-1.10 { 5569f3d048Smistachkin SELECT tointeger('123NO'); 5669f3d048Smistachkin} {{}} 570057a746Sdrhdo_execsql_test func4-1.11 { 5869f3d048Smistachkin SELECT tointeger('0x123NO'); 5969f3d048Smistachkin} {{}} 600057a746Sdrhdo_execsql_test func4-1.12 { 6169f3d048Smistachkin SELECT tointeger('-0x1'); 6269f3d048Smistachkin} {{}} 630057a746Sdrhdo_execsql_test func4-1.13 { 6469f3d048Smistachkin SELECT tointeger('-0x0'); 6569f3d048Smistachkin} {{}} 660057a746Sdrhdo_execsql_test func4-1.14 { 6769f3d048Smistachkin SELECT tointeger('0x0'); 6869f3d048Smistachkin} {{}} 690057a746Sdrhdo_execsql_test func4-1.15 { 7069f3d048Smistachkin SELECT tointeger('0x1'); 7169f3d048Smistachkin} {{}} 720057a746Sdrhdo_execsql_test func4-1.16 { 7369f3d048Smistachkin SELECT tointeger(-1); 7469f3d048Smistachkin} {-1} 750057a746Sdrhdo_execsql_test func4-1.17 { 7669f3d048Smistachkin SELECT tointeger(-0); 7769f3d048Smistachkin} {0} 780057a746Sdrhdo_execsql_test func4-1.18 { 7969f3d048Smistachkin SELECT tointeger(0); 8069f3d048Smistachkin} {0} 810057a746Sdrhdo_execsql_test func4-1.19 { 8269f3d048Smistachkin SELECT tointeger(1); 8369f3d048Smistachkin} {1} 840057a746Sdrhdo_execsql_test func4-1.20 { 8569f3d048Smistachkin SELECT tointeger(-1.79769313486232e308 - 1); 86ee1c64edSmistachkin} {{}} 870057a746Sdrhdo_execsql_test func4-1.21 { 8869f3d048Smistachkin SELECT tointeger(-1.79769313486232e308); 89ee1c64edSmistachkin} {{}} 900057a746Sdrhdo_execsql_test func4-1.22 { 9169f3d048Smistachkin SELECT tointeger(-1.79769313486232e308 + 1); 92ee1c64edSmistachkin} {{}} 930057a746Sdrhdo_execsql_test func4-1.23 { 9469f3d048Smistachkin SELECT tointeger(-9223372036854775808 - 1); 9569f3d048Smistachkin} {-9223372036854775808} 960057a746Sdrhdo_execsql_test func4-1.24 { 9769f3d048Smistachkin SELECT tointeger(-9223372036854775808); 9869f3d048Smistachkin} {-9223372036854775808} 990057a746Sdrhdo_execsql_test func4-1.25 { 10069f3d048Smistachkin SELECT tointeger(-9223372036854775808 + 1); 10169f3d048Smistachkin} {-9223372036854775807} 1020057a746Sdrhdo_execsql_test func4-1.26 { 10398ab33a8Smistachkin SELECT tointeger(-9223372036854775807 - 1); 10498ab33a8Smistachkin} {-9223372036854775808} 10598ab33a8Smistachkindo_execsql_test func4-1.27 { 10698ab33a8Smistachkin SELECT tointeger(-9223372036854775807); 10798ab33a8Smistachkin} {-9223372036854775807} 10898ab33a8Smistachkindo_execsql_test func4-1.28 { 10998ab33a8Smistachkin SELECT tointeger(-9223372036854775807 + 1); 11098ab33a8Smistachkin} {-9223372036854775806} 11198ab33a8Smistachkindo_execsql_test func4-1.29 { 11269f3d048Smistachkin SELECT tointeger(-2147483648 - 1); 11369f3d048Smistachkin} {-2147483649} 11498ab33a8Smistachkindo_execsql_test func4-1.30 { 11569f3d048Smistachkin SELECT tointeger(-2147483648); 11669f3d048Smistachkin} {-2147483648} 11798ab33a8Smistachkindo_execsql_test func4-1.31 { 11869f3d048Smistachkin SELECT tointeger(-2147483648 + 1); 11969f3d048Smistachkin} {-2147483647} 12098ab33a8Smistachkindo_execsql_test func4-1.32 { 12169f3d048Smistachkin SELECT tointeger(2147483647 - 1); 12269f3d048Smistachkin} {2147483646} 12398ab33a8Smistachkindo_execsql_test func4-1.33 { 12469f3d048Smistachkin SELECT tointeger(2147483647); 12569f3d048Smistachkin} {2147483647} 12698ab33a8Smistachkindo_execsql_test func4-1.34 { 12769f3d048Smistachkin SELECT tointeger(2147483647 + 1); 12869f3d048Smistachkin} {2147483648} 12998ab33a8Smistachkindo_execsql_test func4-1.35 { 13069f3d048Smistachkin SELECT tointeger(9223372036854775807 - 1); 13169f3d048Smistachkin} {9223372036854775806} 13298ab33a8Smistachkindo_execsql_test func4-1.36 { 13369f3d048Smistachkin SELECT tointeger(9223372036854775807); 13469f3d048Smistachkin} {9223372036854775807} 135aeddf19eSmistachkinif {$highPrecision(1)} { 13698ab33a8Smistachkin do_execsql_test func4-1.37 { 13769f3d048Smistachkin SELECT tointeger(9223372036854775807 + 1); 1380057a746Sdrh } {{}} 139aeddf19eSmistachkin} 14098ab33a8Smistachkindo_execsql_test func4-1.38 { 14169f3d048Smistachkin SELECT tointeger(1.79769313486232e308 - 1); 142ee1c64edSmistachkin} {{}} 14398ab33a8Smistachkindo_execsql_test func4-1.39 { 14469f3d048Smistachkin SELECT tointeger(1.79769313486232e308); 145ee1c64edSmistachkin} {{}} 14698ab33a8Smistachkindo_execsql_test func4-1.40 { 14769f3d048Smistachkin SELECT tointeger(1.79769313486232e308 + 1); 148ee1c64edSmistachkin} {{}} 14998ab33a8Smistachkindo_execsql_test func4-1.41 { 15069f3d048Smistachkin SELECT tointeger(4503599627370496 - 1); 15169f3d048Smistachkin} {4503599627370495} 15298ab33a8Smistachkindo_execsql_test func4-1.42 { 15369f3d048Smistachkin SELECT tointeger(4503599627370496); 15469f3d048Smistachkin} {4503599627370496} 15598ab33a8Smistachkindo_execsql_test func4-1.43 { 15669f3d048Smistachkin SELECT tointeger(4503599627370496 + 1); 15769f3d048Smistachkin} {4503599627370497} 15898ab33a8Smistachkindo_execsql_test func4-1.44 { 15969f3d048Smistachkin SELECT tointeger(9007199254740992 - 1); 16069f3d048Smistachkin} {9007199254740991} 16198ab33a8Smistachkindo_execsql_test func4-1.45 { 16269f3d048Smistachkin SELECT tointeger(9007199254740992); 16369f3d048Smistachkin} {9007199254740992} 16498ab33a8Smistachkindo_execsql_test func4-1.46 { 16569f3d048Smistachkin SELECT tointeger(9007199254740992 + 1); 16669f3d048Smistachkin} {9007199254740993} 16798ab33a8Smistachkindo_execsql_test func4-1.47 { 16898ab33a8Smistachkin SELECT tointeger(9223372036854775807 - 1); 16998ab33a8Smistachkin} {9223372036854775806} 17098ab33a8Smistachkindo_execsql_test func4-1.48 { 17198ab33a8Smistachkin SELECT tointeger(9223372036854775807); 17298ab33a8Smistachkin} {9223372036854775807} 173aeddf19eSmistachkinif {$highPrecision(1)} { 17498ab33a8Smistachkin do_execsql_test func4-1.49 { 17598ab33a8Smistachkin SELECT tointeger(9223372036854775807 + 1); 17698ab33a8Smistachkin } {{}} 17798ab33a8Smistachkin do_execsql_test func4-1.50 { 17869f3d048Smistachkin SELECT tointeger(9223372036854775808 - 1); 1790057a746Sdrh } {{}} 18098ab33a8Smistachkin do_execsql_test func4-1.51 { 18169f3d048Smistachkin SELECT tointeger(9223372036854775808); 1820057a746Sdrh } {{}} 18398ab33a8Smistachkin do_execsql_test func4-1.52 { 18469f3d048Smistachkin SELECT tointeger(9223372036854775808 + 1); 1850057a746Sdrh } {{}} 186aeddf19eSmistachkin} 18798ab33a8Smistachkindo_execsql_test func4-1.53 { 18869f3d048Smistachkin SELECT tointeger(18446744073709551616 - 1); 189ee1c64edSmistachkin} {{}} 19098ab33a8Smistachkindo_execsql_test func4-1.54 { 19169f3d048Smistachkin SELECT tointeger(18446744073709551616); 192ee1c64edSmistachkin} {{}} 19398ab33a8Smistachkindo_execsql_test func4-1.55 { 19469f3d048Smistachkin SELECT tointeger(18446744073709551616 + 1); 195ee1c64edSmistachkin} {{}} 19669f3d048Smistachkin 19769f3d048Smistachkinifcapable floatingpoint { 198aeddf19eSmistachkin set highPrecision(2) [expr \ 1995f8cdac6Sdrh {[db eval {SELECT toreal(-9223372036854775808 + 1);}] eq {{}}}] 200a17713ffSmistachkin 2010057a746Sdrh do_execsql_test func4-2.1 { 202bc3ec28bSmistachkin SELECT toreal(NULL); 20369f3d048Smistachkin } {{}} 2040057a746Sdrh do_execsql_test func4-2.2 { 205bc3ec28bSmistachkin SELECT toreal(''); 20669f3d048Smistachkin } {{}} 2070057a746Sdrh do_execsql_test func4-2.3 { 208bc3ec28bSmistachkin SELECT toreal(' '); 20969f3d048Smistachkin } {{}} 2100057a746Sdrh do_execsql_test func4-2.4 { 211bc3ec28bSmistachkin SELECT toreal('1234'); 21269f3d048Smistachkin } {1234.0} 2130057a746Sdrh do_execsql_test func4-2.5 { 214bc3ec28bSmistachkin SELECT toreal(' 1234'); 21598ab33a8Smistachkin } {{}} 2160057a746Sdrh do_execsql_test func4-2.6 { 217bc3ec28bSmistachkin SELECT toreal('bad'); 21869f3d048Smistachkin } {{}} 2190057a746Sdrh do_execsql_test func4-2.7 { 220bc3ec28bSmistachkin SELECT toreal('0xBAD'); 22169f3d048Smistachkin } {{}} 2220057a746Sdrh do_execsql_test func4-2.8 { 223bc3ec28bSmistachkin SELECT toreal('123BAD'); 22469f3d048Smistachkin } {{}} 2250057a746Sdrh do_execsql_test func4-2.9 { 226bc3ec28bSmistachkin SELECT toreal('0x123BAD'); 22769f3d048Smistachkin } {{}} 2280057a746Sdrh do_execsql_test func4-2.10 { 229bc3ec28bSmistachkin SELECT toreal('123NO'); 23069f3d048Smistachkin } {{}} 2310057a746Sdrh do_execsql_test func4-2.11 { 232bc3ec28bSmistachkin SELECT toreal('0x123NO'); 23369f3d048Smistachkin } {{}} 2340057a746Sdrh do_execsql_test func4-2.12 { 235bc3ec28bSmistachkin SELECT toreal('-0x1'); 23669f3d048Smistachkin } {{}} 2370057a746Sdrh do_execsql_test func4-2.13 { 238bc3ec28bSmistachkin SELECT toreal('-0x0'); 23969f3d048Smistachkin } {{}} 2400057a746Sdrh do_execsql_test func4-2.14 { 241bc3ec28bSmistachkin SELECT toreal('0x0'); 24269f3d048Smistachkin } {{}} 2430057a746Sdrh do_execsql_test func4-2.15 { 244bc3ec28bSmistachkin SELECT toreal('0x1'); 24569f3d048Smistachkin } {{}} 2460057a746Sdrh do_execsql_test func4-2.16 { 247bc3ec28bSmistachkin SELECT toreal(-1); 24869f3d048Smistachkin } {-1.0} 2490057a746Sdrh do_execsql_test func4-2.17 { 250bc3ec28bSmistachkin SELECT toreal(-0); 25169f3d048Smistachkin } {0.0} 2520057a746Sdrh do_execsql_test func4-2.18 { 253bc3ec28bSmistachkin SELECT toreal(0); 25469f3d048Smistachkin } {0.0} 2550057a746Sdrh do_execsql_test func4-2.19 { 256bc3ec28bSmistachkin SELECT toreal(1); 25769f3d048Smistachkin } {1.0} 2580057a746Sdrh do_execsql_test func4-2.20 { 259bc3ec28bSmistachkin SELECT toreal(-1.79769313486232e308 - 1); 26069f3d048Smistachkin } {-Inf} 2610057a746Sdrh do_execsql_test func4-2.21 { 262bc3ec28bSmistachkin SELECT toreal(-1.79769313486232e308); 26369f3d048Smistachkin } {-Inf} 2640057a746Sdrh do_execsql_test func4-2.22 { 265bc3ec28bSmistachkin SELECT toreal(-1.79769313486232e308 + 1); 26669f3d048Smistachkin } {-Inf} 2670057a746Sdrh do_execsql_test func4-2.23 { 268bc3ec28bSmistachkin SELECT toreal(-9223372036854775808 - 1); 26998ab33a8Smistachkin } {-9.223372036854776e+18} 2700057a746Sdrh do_execsql_test func4-2.24 { 271bc3ec28bSmistachkin SELECT toreal(-9223372036854775808); 27298ab33a8Smistachkin } {-9.223372036854776e+18} 273aeddf19eSmistachkin if {$highPrecision(2)} { 2740057a746Sdrh do_execsql_test func4-2.25 { 275bc3ec28bSmistachkin SELECT toreal(-9223372036854775808 + 1); 27698ab33a8Smistachkin } {{}} 277a17713ffSmistachkin } 2780057a746Sdrh do_execsql_test func4-2.26 { 27998ab33a8Smistachkin SELECT toreal(-9223372036854775807 - 1); 28098ab33a8Smistachkin } {-9.223372036854776e+18} 281aeddf19eSmistachkin if {$highPrecision(2)} { 28298ab33a8Smistachkin do_execsql_test func4-2.27 { 28398ab33a8Smistachkin SELECT toreal(-9223372036854775807); 28498ab33a8Smistachkin } {{}} 28598ab33a8Smistachkin do_execsql_test func4-2.28 { 28698ab33a8Smistachkin SELECT toreal(-9223372036854775807 + 1); 28798ab33a8Smistachkin } {{}} 288a17713ffSmistachkin } 28998ab33a8Smistachkin do_execsql_test func4-2.29 { 290bc3ec28bSmistachkin SELECT toreal(-2147483648 - 1); 29169f3d048Smistachkin } {-2147483649.0} 29298ab33a8Smistachkin do_execsql_test func4-2.30 { 293bc3ec28bSmistachkin SELECT toreal(-2147483648); 29469f3d048Smistachkin } {-2147483648.0} 29598ab33a8Smistachkin do_execsql_test func4-2.31 { 296bc3ec28bSmistachkin SELECT toreal(-2147483648 + 1); 29769f3d048Smistachkin } {-2147483647.0} 29898ab33a8Smistachkin do_execsql_test func4-2.32 { 299bc3ec28bSmistachkin SELECT toreal(2147483647 - 1); 30069f3d048Smistachkin } {2147483646.0} 30198ab33a8Smistachkin do_execsql_test func4-2.33 { 302bc3ec28bSmistachkin SELECT toreal(2147483647); 30369f3d048Smistachkin } {2147483647.0} 30498ab33a8Smistachkin do_execsql_test func4-2.34 { 305bc3ec28bSmistachkin SELECT toreal(2147483647 + 1); 30669f3d048Smistachkin } {2147483648.0} 307aeddf19eSmistachkin if {$highPrecision(2)} { 3080057a746Sdrh do_execsql_test func4-2.35 { 30998ab33a8Smistachkin SELECT toreal(9223372036854775807 - 1); 31098ab33a8Smistachkin } {{}} 311aeddf19eSmistachkin if {$highPrecision(1)} { 31298ab33a8Smistachkin do_execsql_test func4-2.36 { 31398ab33a8Smistachkin SELECT toreal(9223372036854775807); 31498ab33a8Smistachkin } {{}} 315a17713ffSmistachkin } 316aeddf19eSmistachkin } 31798ab33a8Smistachkin do_execsql_test func4-2.37 { 31898ab33a8Smistachkin SELECT toreal(9223372036854775807 + 1); 31998ab33a8Smistachkin } {9.223372036854776e+18} 32098ab33a8Smistachkin do_execsql_test func4-2.38 { 321bc3ec28bSmistachkin SELECT toreal(1.79769313486232e308 - 1); 32269f3d048Smistachkin } {Inf} 32398ab33a8Smistachkin do_execsql_test func4-2.39 { 324bc3ec28bSmistachkin SELECT toreal(1.79769313486232e308); 32569f3d048Smistachkin } {Inf} 32698ab33a8Smistachkin do_execsql_test func4-2.40 { 327bc3ec28bSmistachkin SELECT toreal(1.79769313486232e308 + 1); 32869f3d048Smistachkin } {Inf} 3290057a746Sdrh do_execsql_test func4-2.41 { 33098ab33a8Smistachkin SELECT toreal(4503599627370496 - 1); 33198ab33a8Smistachkin } {4503599627370495.0} 3320057a746Sdrh do_execsql_test func4-2.42 { 33398ab33a8Smistachkin SELECT toreal(4503599627370496); 33498ab33a8Smistachkin } {4503599627370496.0} 3350057a746Sdrh do_execsql_test func4-2.43 { 33698ab33a8Smistachkin SELECT toreal(4503599627370496 + 1); 33798ab33a8Smistachkin } {4503599627370497.0} 3380057a746Sdrh do_execsql_test func4-2.44 { 33998ab33a8Smistachkin SELECT toreal(9007199254740992 - 1); 34098ab33a8Smistachkin } {9007199254740991.0} 3410057a746Sdrh do_execsql_test func4-2.45 { 34298ab33a8Smistachkin SELECT toreal(9007199254740992); 34398ab33a8Smistachkin } {9007199254740992.0} 344aeddf19eSmistachkin if {$highPrecision(2)} { 3450057a746Sdrh do_execsql_test func4-2.46 { 34698ab33a8Smistachkin SELECT toreal(9007199254740992 + 1); 34798ab33a8Smistachkin } {{}} 348a17713ffSmistachkin } 3490057a746Sdrh do_execsql_test func4-2.47 { 35098ab33a8Smistachkin SELECT toreal(9007199254740992 + 2); 35198ab33a8Smistachkin } {9007199254740994.0} 3520057a746Sdrh do_execsql_test func4-2.48 { 35398ab33a8Smistachkin SELECT toreal(tointeger(9223372036854775808) - 1); 35498ab33a8Smistachkin } {{}} 355aeddf19eSmistachkin if {$highPrecision(1)} { 3560057a746Sdrh do_execsql_test func4-2.49 { 35798ab33a8Smistachkin SELECT toreal(tointeger(9223372036854775808)); 35898ab33a8Smistachkin } {{}} 35998ab33a8Smistachkin do_execsql_test func4-2.50 { 36098ab33a8Smistachkin SELECT toreal(tointeger(9223372036854775808) + 1); 36198ab33a8Smistachkin } {{}} 362aeddf19eSmistachkin } 36398ab33a8Smistachkin do_execsql_test func4-2.51 { 36498ab33a8Smistachkin SELECT toreal(tointeger(18446744073709551616) - 1); 36598ab33a8Smistachkin } {{}} 36698ab33a8Smistachkin do_execsql_test func4-2.52 { 36798ab33a8Smistachkin SELECT toreal(tointeger(18446744073709551616)); 36898ab33a8Smistachkin } {{}} 36998ab33a8Smistachkin do_execsql_test func4-2.53 { 37098ab33a8Smistachkin SELECT toreal(tointeger(18446744073709551616) + 1); 37198ab33a8Smistachkin } {{}} 37269f3d048Smistachkin} 37369f3d048Smistachkin 37432be00a5Smistachkinifcapable check { 3750057a746Sdrh do_execsql_test func4-3.1 { 37632be00a5Smistachkin CREATE TABLE t1( 37798ab33a8Smistachkin x INTEGER CHECK(tointeger(x) IS NOT NULL) 37832be00a5Smistachkin ); 37932be00a5Smistachkin } {} 3800057a746Sdrh do_test func4-3.2 { 38132be00a5Smistachkin catchsql { 38232be00a5Smistachkin INSERT INTO t1 (x) VALUES (NULL); 38332be00a5Smistachkin } 384*92e21ef0Sdrh } {1 {CHECK constraint failed: tointeger(x) IS NOT NULL}} 3850057a746Sdrh do_test func4-3.3 { 38632be00a5Smistachkin catchsql { 38732be00a5Smistachkin INSERT INTO t1 (x) VALUES (NULL); 38832be00a5Smistachkin } 389*92e21ef0Sdrh } {1 {CHECK constraint failed: tointeger(x) IS NOT NULL}} 3900057a746Sdrh do_test func4-3.4 { 39132be00a5Smistachkin catchsql { 39232be00a5Smistachkin INSERT INTO t1 (x) VALUES (''); 39332be00a5Smistachkin } 394*92e21ef0Sdrh } {1 {CHECK constraint failed: tointeger(x) IS NOT NULL}} 3950057a746Sdrh do_test func4-3.5 { 39632be00a5Smistachkin catchsql { 39732be00a5Smistachkin INSERT INTO t1 (x) VALUES ('bad'); 39832be00a5Smistachkin } 399*92e21ef0Sdrh } {1 {CHECK constraint failed: tointeger(x) IS NOT NULL}} 4000057a746Sdrh do_test func4-3.6 { 40132be00a5Smistachkin catchsql { 40232be00a5Smistachkin INSERT INTO t1 (x) VALUES ('1234bad'); 40332be00a5Smistachkin } 404*92e21ef0Sdrh } {1 {CHECK constraint failed: tointeger(x) IS NOT NULL}} 4050057a746Sdrh do_test func4-3.7 { 40632be00a5Smistachkin catchsql { 407ee1c64edSmistachkin INSERT INTO t1 (x) VALUES ('1234.56bad'); 408ee1c64edSmistachkin } 409*92e21ef0Sdrh } {1 {CHECK constraint failed: tointeger(x) IS NOT NULL}} 4100057a746Sdrh do_test func4-3.8 { 411ee1c64edSmistachkin catchsql { 41232be00a5Smistachkin INSERT INTO t1 (x) VALUES (1234); 41332be00a5Smistachkin } 41432be00a5Smistachkin } {0 {}} 4150057a746Sdrh do_test func4-3.9 { 41632be00a5Smistachkin catchsql { 41732be00a5Smistachkin INSERT INTO t1 (x) VALUES (1234.56); 41832be00a5Smistachkin } 419*92e21ef0Sdrh } {1 {CHECK constraint failed: tointeger(x) IS NOT NULL}} 4200057a746Sdrh do_test func4-3.10 { 42132be00a5Smistachkin catchsql { 42232be00a5Smistachkin INSERT INTO t1 (x) VALUES ('1234'); 42332be00a5Smistachkin } 42432be00a5Smistachkin } {0 {}} 4250057a746Sdrh do_test func4-3.11 { 42632be00a5Smistachkin catchsql { 42732be00a5Smistachkin INSERT INTO t1 (x) VALUES ('1234.56'); 42832be00a5Smistachkin } 429*92e21ef0Sdrh } {1 {CHECK constraint failed: tointeger(x) IS NOT NULL}} 4300057a746Sdrh do_test func4-3.12 { 43132be00a5Smistachkin catchsql { 43232be00a5Smistachkin INSERT INTO t1 (x) VALUES (ZEROBLOB(4)); 43332be00a5Smistachkin } 434*92e21ef0Sdrh } {1 {CHECK constraint failed: tointeger(x) IS NOT NULL}} 4350057a746Sdrh do_test func4-3.13 { 43632be00a5Smistachkin catchsql { 43732be00a5Smistachkin INSERT INTO t1 (x) VALUES (X''); 43832be00a5Smistachkin } 439*92e21ef0Sdrh } {1 {CHECK constraint failed: tointeger(x) IS NOT NULL}} 4400057a746Sdrh do_test func4-3.14 { 44132be00a5Smistachkin catchsql { 44232be00a5Smistachkin INSERT INTO t1 (x) VALUES (X'1234'); 44332be00a5Smistachkin } 444*92e21ef0Sdrh } {1 {CHECK constraint failed: tointeger(x) IS NOT NULL}} 4450057a746Sdrh do_test func4-3.15 { 44632be00a5Smistachkin catchsql { 44732be00a5Smistachkin INSERT INTO t1 (x) VALUES (X'12345678'); 44832be00a5Smistachkin } 449*92e21ef0Sdrh } {1 {CHECK constraint failed: tointeger(x) IS NOT NULL}} 45098ab33a8Smistachkin do_test func4-3.16 { 45198ab33a8Smistachkin catchsql { 45298ab33a8Smistachkin INSERT INTO t1 (x) VALUES ('1234.00'); 45398ab33a8Smistachkin } 4549dce0ef4Sdrh } {0 {}} 45598ab33a8Smistachkin do_test func4-3.17 { 45698ab33a8Smistachkin catchsql { 45798ab33a8Smistachkin INSERT INTO t1 (x) VALUES (1234.00); 45898ab33a8Smistachkin } 45998ab33a8Smistachkin } {0 {}} 46098ab33a8Smistachkin do_test func4-3.18 { 46198ab33a8Smistachkin catchsql { 46298ab33a8Smistachkin INSERT INTO t1 (x) VALUES ('-9223372036854775809'); 46398ab33a8Smistachkin } 4649dce0ef4Sdrh } {0 {}} 465aeddf19eSmistachkin if {$highPrecision(1)} { 46698ab33a8Smistachkin do_test func4-3.19 { 46798ab33a8Smistachkin catchsql { 46898ab33a8Smistachkin INSERT INTO t1 (x) VALUES (9223372036854775808); 46998ab33a8Smistachkin } 470*92e21ef0Sdrh } {1 {CHECK constraint failed: tointeger(x) IS NOT NULL}} 471aeddf19eSmistachkin } 47298ab33a8Smistachkin do_execsql_test func4-3.20 { 4739dce0ef4Sdrh SELECT x FROM t1 WHERE x>0 ORDER BY x; 4749dce0ef4Sdrh } {1234 1234 1234 1234} 475ee1c64edSmistachkin 476ee1c64edSmistachkin ifcapable floatingpoint { 4770057a746Sdrh do_execsql_test func4-4.1 { 478ee1c64edSmistachkin CREATE TABLE t2( 479bc3ec28bSmistachkin x REAL CHECK(toreal(x) IS NOT NULL) 480ee1c64edSmistachkin ); 481ee1c64edSmistachkin } {} 4820057a746Sdrh do_test func4-4.2 { 483ee1c64edSmistachkin catchsql { 484ee1c64edSmistachkin INSERT INTO t2 (x) VALUES (NULL); 485ee1c64edSmistachkin } 486*92e21ef0Sdrh } {1 {CHECK constraint failed: toreal(x) IS NOT NULL}} 4870057a746Sdrh do_test func4-4.3 { 488ee1c64edSmistachkin catchsql { 489ee1c64edSmistachkin INSERT INTO t2 (x) VALUES (NULL); 490ee1c64edSmistachkin } 491*92e21ef0Sdrh } {1 {CHECK constraint failed: toreal(x) IS NOT NULL}} 4920057a746Sdrh do_test func4-4.4 { 493ee1c64edSmistachkin catchsql { 494ee1c64edSmistachkin INSERT INTO t2 (x) VALUES (''); 495ee1c64edSmistachkin } 496*92e21ef0Sdrh } {1 {CHECK constraint failed: toreal(x) IS NOT NULL}} 4970057a746Sdrh do_test func4-4.5 { 498ee1c64edSmistachkin catchsql { 499ee1c64edSmistachkin INSERT INTO t2 (x) VALUES ('bad'); 500ee1c64edSmistachkin } 501*92e21ef0Sdrh } {1 {CHECK constraint failed: toreal(x) IS NOT NULL}} 5020057a746Sdrh do_test func4-4.6 { 503ee1c64edSmistachkin catchsql { 504ee1c64edSmistachkin INSERT INTO t2 (x) VALUES ('1234bad'); 505ee1c64edSmistachkin } 506*92e21ef0Sdrh } {1 {CHECK constraint failed: toreal(x) IS NOT NULL}} 5070057a746Sdrh do_test func4-4.7 { 508ee1c64edSmistachkin catchsql { 509ee1c64edSmistachkin INSERT INTO t2 (x) VALUES ('1234.56bad'); 510ee1c64edSmistachkin } 511*92e21ef0Sdrh } {1 {CHECK constraint failed: toreal(x) IS NOT NULL}} 5120057a746Sdrh do_test func4-4.8 { 513ee1c64edSmistachkin catchsql { 514ee1c64edSmistachkin INSERT INTO t2 (x) VALUES (1234); 515ee1c64edSmistachkin } 516ee1c64edSmistachkin } {0 {}} 5170057a746Sdrh do_test func4-4.9 { 518ee1c64edSmistachkin catchsql { 519ee1c64edSmistachkin INSERT INTO t2 (x) VALUES (1234.56); 520ee1c64edSmistachkin } 521ee1c64edSmistachkin } {0 {}} 5220057a746Sdrh do_test func4-4.10 { 523ee1c64edSmistachkin catchsql { 524ee1c64edSmistachkin INSERT INTO t2 (x) VALUES ('1234'); 525ee1c64edSmistachkin } 526ee1c64edSmistachkin } {0 {}} 5270057a746Sdrh do_test func4-4.11 { 528ee1c64edSmistachkin catchsql { 529ee1c64edSmistachkin INSERT INTO t2 (x) VALUES ('1234.56'); 530ee1c64edSmistachkin } 531ee1c64edSmistachkin } {0 {}} 5320057a746Sdrh do_test func4-4.12 { 533ee1c64edSmistachkin catchsql { 534ee1c64edSmistachkin INSERT INTO t2 (x) VALUES (ZEROBLOB(4)); 535ee1c64edSmistachkin } 536*92e21ef0Sdrh } {1 {CHECK constraint failed: toreal(x) IS NOT NULL}} 5370057a746Sdrh do_test func4-4.13 { 538ee1c64edSmistachkin catchsql { 539ee1c64edSmistachkin INSERT INTO t2 (x) VALUES (X''); 540ee1c64edSmistachkin } 541*92e21ef0Sdrh } {1 {CHECK constraint failed: toreal(x) IS NOT NULL}} 5420057a746Sdrh do_test func4-4.14 { 543ee1c64edSmistachkin catchsql { 544ee1c64edSmistachkin INSERT INTO t2 (x) VALUES (X'1234'); 545ee1c64edSmistachkin } 546*92e21ef0Sdrh } {1 {CHECK constraint failed: toreal(x) IS NOT NULL}} 5470057a746Sdrh do_test func4-4.15 { 548ee1c64edSmistachkin catchsql { 549ee1c64edSmistachkin INSERT INTO t2 (x) VALUES (X'12345678'); 550ee1c64edSmistachkin } 551*92e21ef0Sdrh } {1 {CHECK constraint failed: toreal(x) IS NOT NULL}} 5520057a746Sdrh do_execsql_test func4-4.16 { 553ee1c64edSmistachkin SELECT x FROM t2 ORDER BY x; 554ee1c64edSmistachkin } {1234.0 1234.0 1234.56 1234.56} 555ee1c64edSmistachkin } 55632be00a5Smistachkin} 55732be00a5Smistachkin 55898ab33a8Smistachkinifcapable floatingpoint { 55998ab33a8Smistachkin do_execsql_test func4-5.1 { 56098ab33a8Smistachkin SELECT tointeger(toreal('1234')); 56198ab33a8Smistachkin } {1234} 56298ab33a8Smistachkin do_execsql_test func4-5.2 { 56398ab33a8Smistachkin SELECT tointeger(toreal(-1)); 56498ab33a8Smistachkin } {-1} 56598ab33a8Smistachkin do_execsql_test func4-5.3 { 56698ab33a8Smistachkin SELECT tointeger(toreal(-0)); 56798ab33a8Smistachkin } {0} 56898ab33a8Smistachkin do_execsql_test func4-5.4 { 56998ab33a8Smistachkin SELECT tointeger(toreal(0)); 57098ab33a8Smistachkin } {0} 57198ab33a8Smistachkin do_execsql_test func4-5.5 { 57298ab33a8Smistachkin SELECT tointeger(toreal(1)); 57398ab33a8Smistachkin } {1} 57498ab33a8Smistachkin do_execsql_test func4-5.6 { 57598ab33a8Smistachkin SELECT tointeger(toreal(-9223372036854775808 - 1)); 57698ab33a8Smistachkin } {-9223372036854775808} 57798ab33a8Smistachkin do_execsql_test func4-5.7 { 57898ab33a8Smistachkin SELECT tointeger(toreal(-9223372036854775808)); 57998ab33a8Smistachkin } {-9223372036854775808} 580aeddf19eSmistachkin if {$highPrecision(2)} { 58198ab33a8Smistachkin do_execsql_test func4-5.8 { 58298ab33a8Smistachkin SELECT tointeger(toreal(-9223372036854775808 + 1)); 58398ab33a8Smistachkin } {{}} 584a17713ffSmistachkin } 58598ab33a8Smistachkin do_execsql_test func4-5.9 { 58698ab33a8Smistachkin SELECT tointeger(toreal(-2147483648 - 1)); 58798ab33a8Smistachkin } {-2147483649} 58898ab33a8Smistachkin do_execsql_test func4-5.10 { 58998ab33a8Smistachkin SELECT tointeger(toreal(-2147483648)); 59098ab33a8Smistachkin } {-2147483648} 59198ab33a8Smistachkin do_execsql_test func4-5.11 { 59298ab33a8Smistachkin SELECT tointeger(toreal(-2147483648 + 1)); 59398ab33a8Smistachkin } {-2147483647} 59498ab33a8Smistachkin do_execsql_test func4-5.12 { 59598ab33a8Smistachkin SELECT tointeger(toreal(2147483647 - 1)); 59698ab33a8Smistachkin } {2147483646} 59798ab33a8Smistachkin do_execsql_test func4-5.13 { 59898ab33a8Smistachkin SELECT tointeger(toreal(2147483647)); 59998ab33a8Smistachkin } {2147483647} 60098ab33a8Smistachkin do_execsql_test func4-5.14 { 60198ab33a8Smistachkin SELECT tointeger(toreal(2147483647 + 1)); 60298ab33a8Smistachkin } {2147483648} 60398ab33a8Smistachkin do_execsql_test func4-5.15 { 60498ab33a8Smistachkin SELECT tointeger(toreal(9223372036854775807 - 1)); 60598ab33a8Smistachkin } {{}} 606aeddf19eSmistachkin if {$highPrecision(1)} { 60798ab33a8Smistachkin do_execsql_test func4-5.16 { 60898ab33a8Smistachkin SELECT tointeger(toreal(9223372036854775807)); 60998ab33a8Smistachkin } {{}} 61098ab33a8Smistachkin do_execsql_test func4-5.17 { 61198ab33a8Smistachkin SELECT tointeger(toreal(9223372036854775807 + 1)); 61298ab33a8Smistachkin } {{}} 613aeddf19eSmistachkin } 61498ab33a8Smistachkin do_execsql_test func4-5.18 { 61598ab33a8Smistachkin SELECT tointeger(toreal(4503599627370496 - 1)); 61698ab33a8Smistachkin } {4503599627370495} 61798ab33a8Smistachkin do_execsql_test func4-5.19 { 61898ab33a8Smistachkin SELECT tointeger(toreal(4503599627370496)); 61998ab33a8Smistachkin } {4503599627370496} 62098ab33a8Smistachkin do_execsql_test func4-5.20 { 62198ab33a8Smistachkin SELECT tointeger(toreal(4503599627370496 + 1)); 62298ab33a8Smistachkin } {4503599627370497} 62398ab33a8Smistachkin do_execsql_test func4-5.21 { 62498ab33a8Smistachkin SELECT tointeger(toreal(9007199254740992 - 1)); 62598ab33a8Smistachkin } {9007199254740991} 62698ab33a8Smistachkin do_execsql_test func4-5.22 { 62798ab33a8Smistachkin SELECT tointeger(toreal(9007199254740992)); 62898ab33a8Smistachkin } {9007199254740992} 629aeddf19eSmistachkin if {$highPrecision(2)} { 63098ab33a8Smistachkin do_execsql_test func4-5.23 { 63198ab33a8Smistachkin SELECT tointeger(toreal(9007199254740992 + 1)); 63298ab33a8Smistachkin } {{}} 633a17713ffSmistachkin } 63498ab33a8Smistachkin do_execsql_test func4-5.24 { 63598ab33a8Smistachkin SELECT tointeger(toreal(9007199254740992 + 2)); 63698ab33a8Smistachkin } {9007199254740994} 637aeddf19eSmistachkin if {$highPrecision(1)} { 63898ab33a8Smistachkin do_execsql_test func4-5.25 { 63998ab33a8Smistachkin SELECT tointeger(toreal(9223372036854775808 - 1)); 64098ab33a8Smistachkin } {{}} 64198ab33a8Smistachkin do_execsql_test func4-5.26 { 64298ab33a8Smistachkin SELECT tointeger(toreal(9223372036854775808)); 64398ab33a8Smistachkin } {{}} 64498ab33a8Smistachkin do_execsql_test func4-5.27 { 64598ab33a8Smistachkin SELECT tointeger(toreal(9223372036854775808 + 1)); 64698ab33a8Smistachkin } {{}} 647aeddf19eSmistachkin } 64898ab33a8Smistachkin do_execsql_test func4-5.28 { 64998ab33a8Smistachkin SELECT tointeger(toreal(18446744073709551616 - 1)); 65098ab33a8Smistachkin } {{}} 65198ab33a8Smistachkin do_execsql_test func4-5.29 { 65298ab33a8Smistachkin SELECT tointeger(toreal(18446744073709551616)); 65398ab33a8Smistachkin } {{}} 65498ab33a8Smistachkin do_execsql_test func4-5.30 { 65598ab33a8Smistachkin SELECT tointeger(toreal(18446744073709551616 + 1)); 65698ab33a8Smistachkin } {{}} 65798ab33a8Smistachkin} 65898ab33a8Smistachkin 659aeddf19eSmistachkinfor {set i 0} {$i < 10} {incr i} { 660aeddf19eSmistachkin if {$i == 8} continue 661aeddf19eSmistachkin do_execsql_test func4-6.1.$i.1 [subst { 662aeddf19eSmistachkin SELECT tointeger(x'[string repeat 01 $i]'); 663aeddf19eSmistachkin }] {{}} 664aeddf19eSmistachkin ifcapable floatingpoint { 665aeddf19eSmistachkin do_execsql_test func4-6.1.$i.2 [subst { 666aeddf19eSmistachkin SELECT toreal(x'[string repeat 01 $i]'); 667aeddf19eSmistachkin }] {{}} 668aeddf19eSmistachkin } 669aeddf19eSmistachkin} 670aeddf19eSmistachkin 6719a5b2719Smistachkindo_execsql_test func4-6.2.1 { 6729a5b2719Smistachkin SELECT tointeger(x'0102030405060708'); 6739a5b2719Smistachkin} {578437695752307201} 6749a5b2719Smistachkindo_execsql_test func4-6.2.2 { 6759a5b2719Smistachkin SELECT tointeger(x'0807060504030201'); 6769a5b2719Smistachkin} {72623859790382856} 677aeddf19eSmistachkin 678aeddf19eSmistachkinifcapable floatingpoint { 6799a5b2719Smistachkin do_execsql_test func4-6.3.1 { 6809a5b2719Smistachkin SELECT toreal(x'ffefffffffffffff'); 6819a5b2719Smistachkin } {-1.7976931348623157e+308} 6829a5b2719Smistachkin do_execsql_test func4-6.3.2 { 6839a5b2719Smistachkin SELECT toreal(x'8010000000000000'); 6849a5b2719Smistachkin } {-2.2250738585072014e-308} 6859a5b2719Smistachkin do_execsql_test func4-6.3.3 { 6869a5b2719Smistachkin SELECT toreal(x'c000000000000000'); 6879a5b2719Smistachkin } {-2.0} 6889a5b2719Smistachkin do_execsql_test func4-6.3.4 { 6899a5b2719Smistachkin SELECT toreal(x'bff0000000000000'); 6909a5b2719Smistachkin } {-1.0} 6919a5b2719Smistachkin do_execsql_test func4-6.3.5 { 6929a5b2719Smistachkin SELECT toreal(x'8000000000000000'); 6939a5b2719Smistachkin } {-0.0} 6949a5b2719Smistachkin do_execsql_test func4-6.3.6 { 6959a5b2719Smistachkin SELECT toreal(x'0000000000000000'); 6969a5b2719Smistachkin } {0.0} 6979a5b2719Smistachkin do_execsql_test func4-6.3.7 { 6989a5b2719Smistachkin SELECT toreal(x'3ff0000000000000'); 6999a5b2719Smistachkin } {1.0} 7009a5b2719Smistachkin do_execsql_test func4-6.3.8 { 7019a5b2719Smistachkin SELECT toreal(x'4000000000000000'); 7029a5b2719Smistachkin } {2.0} 7039a5b2719Smistachkin do_execsql_test func4-6.3.9 { 7049a5b2719Smistachkin SELECT toreal(x'0010000000000000'); 7059a5b2719Smistachkin } {2.2250738585072014e-308} 7069a5b2719Smistachkin do_execsql_test func4-6.3.10 { 7079a5b2719Smistachkin SELECT toreal(x'7fefffffffffffff'); 7089a5b2719Smistachkin } {1.7976931348623157e+308} 7099a5b2719Smistachkin do_execsql_test func4-6.3.11 { 7109a5b2719Smistachkin SELECT toreal(x'8000000000000001'); 7119a5b2719Smistachkin } {-5e-324} 7129a5b2719Smistachkin do_execsql_test func4-6.3.12 { 7139a5b2719Smistachkin SELECT toreal(x'800fffffffffffff'); 7149a5b2719Smistachkin } {-2.225073858507201e-308} 7159a5b2719Smistachkin do_execsql_test func4-6.3.13 { 7169a5b2719Smistachkin SELECT toreal(x'0000000000000001'); 7179a5b2719Smistachkin } {5e-324} 7189a5b2719Smistachkin do_execsql_test func4-6.3.14 { 7199a5b2719Smistachkin SELECT toreal(x'000fffffffffffff'); 7209a5b2719Smistachkin } {2.225073858507201e-308} 7219a5b2719Smistachkin do_execsql_test func4-6.3.15 { 7229a5b2719Smistachkin SELECT toreal(x'fff0000000000000'); 7239a5b2719Smistachkin } {-Inf} 7249a5b2719Smistachkin do_execsql_test func4-6.3.16 { 7259a5b2719Smistachkin SELECT toreal(x'7ff0000000000000'); 7269a5b2719Smistachkin } {Inf} 7279a5b2719Smistachkin do_execsql_test func4-6.3.17 { 7289a5b2719Smistachkin SELECT toreal(x'fff8000000000000'); 7299a5b2719Smistachkin } {{}} 7309a5b2719Smistachkin do_execsql_test func4-6.3.18 { 7319a5b2719Smistachkin SELECT toreal(x'fff0000000000001'); 7329a5b2719Smistachkin } {{}} 7339a5b2719Smistachkin do_execsql_test func4-6.3.19 { 7349a5b2719Smistachkin SELECT toreal(x'fff7ffffffffffff'); 7359a5b2719Smistachkin } {{}} 7369a5b2719Smistachkin do_execsql_test func4-6.3.20 { 7379a5b2719Smistachkin SELECT toreal(x'7ff0000000000001'); 7389a5b2719Smistachkin } {{}} 7399a5b2719Smistachkin do_execsql_test func4-6.3.21 { 7409a5b2719Smistachkin SELECT toreal(x'7ff7ffffffffffff'); 7419a5b2719Smistachkin } {{}} 7429a5b2719Smistachkin do_execsql_test func4-6.3.22 { 7439a5b2719Smistachkin SELECT toreal(x'fff8000000000001'); 7449a5b2719Smistachkin } {{}} 7459a5b2719Smistachkin do_execsql_test func4-6.3.23 { 7469a5b2719Smistachkin SELECT toreal(x'ffffffffffffffff'); 7479a5b2719Smistachkin } {{}} 7489a5b2719Smistachkin do_execsql_test func4-6.3.24 { 7499a5b2719Smistachkin SELECT toreal(x'7ff8000000000000'); 7509a5b2719Smistachkin } {{}} 7519a5b2719Smistachkin do_execsql_test func4-6.3.25 { 7529a5b2719Smistachkin SELECT toreal(x'7fffffffffffffff'); 7539a5b2719Smistachkin } {{}} 754aeddf19eSmistachkin} 755aeddf19eSmistachkin 75698ab33a8Smistachkinset tcl_precision $saved_tcl_precision 75798ab33a8Smistachkinunset saved_tcl_precision 75869f3d048Smistachkinfinish_test 759