# 2013 March 10 # # 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. # #*********************************************************************** # This file implements regression tests for SQLite library. The # focus of this file is testing the tointeger() and toreal() # functions. # set testdir [file dirname $argv0] source $testdir/tester.tcl do_execsql_test func4-1.1 { SELECT tointeger(NULL); } {{}} do_execsql_test func4-1.2 { SELECT tointeger(''); } {{}} do_execsql_test func4-1.3 { SELECT tointeger(' '); } {{}} do_execsql_test func4-1.4 { SELECT tointeger('1234'); } {1234} do_execsql_test func4-1.5 { SELECT tointeger(' 1234'); } {1234} do_execsql_test func4-1.6 { SELECT tointeger('bad'); } {{}} do_execsql_test func4-1.7 { SELECT tointeger('0xBAD'); } {{}} do_execsql_test func4-1.8 { SELECT tointeger('123BAD'); } {{}} do_execsql_test func4-1.9 { SELECT tointeger('0x123BAD'); } {{}} do_execsql_test func4-1.10 { SELECT tointeger('123NO'); } {{}} do_execsql_test func4-1.11 { SELECT tointeger('0x123NO'); } {{}} do_execsql_test func4-1.12 { SELECT tointeger('-0x1'); } {{}} do_execsql_test func4-1.13 { SELECT tointeger('-0x0'); } {{}} do_execsql_test func4-1.14 { SELECT tointeger('0x0'); } {{}} do_execsql_test func4-1.15 { SELECT tointeger('0x1'); } {{}} do_execsql_test func4-1.16 { SELECT tointeger(-1); } {-1} do_execsql_test func4-1.17 { SELECT tointeger(-0); } {0} do_execsql_test func4-1.18 { SELECT tointeger(0); } {0} do_execsql_test func4-1.19 { SELECT tointeger(1); } {1} do_execsql_test func4-1.20 { SELECT tointeger(-1.79769313486232e308 - 1); } {{}} do_execsql_test func4-1.21 { SELECT tointeger(-1.79769313486232e308); } {{}} do_execsql_test func4-1.22 { SELECT tointeger(-1.79769313486232e308 + 1); } {{}} do_execsql_test func4-1.23 { SELECT tointeger(-9223372036854775808 - 1); } {-9223372036854775808} do_execsql_test func4-1.24 { SELECT tointeger(-9223372036854775808); } {-9223372036854775808} do_execsql_test func4-1.25 { SELECT tointeger(-9223372036854775808 + 1); } {-9223372036854775807} do_execsql_test func4-1.26 { SELECT tointeger(-2147483648 - 1); } {-2147483649} do_execsql_test func4-1.27 { SELECT tointeger(-2147483648); } {-2147483648} do_execsql_test func4-1.28 { SELECT tointeger(-2147483648 + 1); } {-2147483647} do_execsql_test func4-1.29 { SELECT tointeger(2147483647 - 1); } {2147483646} do_execsql_test func4-1.30 { SELECT tointeger(2147483647); } {2147483647} do_execsql_test func4-1.31 { SELECT tointeger(2147483647 + 1); } {2147483648} do_execsql_test func4-1.32 { SELECT tointeger(9223372036854775807 - 1); } {9223372036854775806} do_execsql_test func4-1.33 { SELECT tointeger(9223372036854775807); } {9223372036854775807} do_execsql_test func4-1.34 { SELECT tointeger(9223372036854775807 + 1); } {{}} do_execsql_test func4-1.35 { SELECT tointeger(1.79769313486232e308 - 1); } {{}} do_execsql_test func4-1.36 { SELECT tointeger(1.79769313486232e308); } {{}} do_execsql_test func4-1.37 { SELECT tointeger(1.79769313486232e308 + 1); } {{}} do_execsql_test func4-1.38 { SELECT tointeger(4503599627370496 - 1); } {4503599627370495} do_execsql_test func4-1.39 { SELECT tointeger(4503599627370496); } {4503599627370496} do_execsql_test func4-1.40 { SELECT tointeger(4503599627370496 + 1); } {4503599627370497} do_execsql_test func4-1.41 { SELECT tointeger(9007199254740992 - 1); } {9007199254740991} do_execsql_test func4-1.42 { SELECT tointeger(9007199254740992); } {9007199254740992} do_execsql_test func4-1.43 { SELECT tointeger(9007199254740992 + 1); } {9007199254740993} do_execsql_test func4-1.44 { SELECT tointeger(9223372036854775808 - 1); } {{}} do_execsql_test func4-1.45 { SELECT tointeger(9223372036854775808); } {{}} do_execsql_test func4-1.46 { SELECT tointeger(9223372036854775808 + 1); } {{}} do_execsql_test func4-1.47 { SELECT tointeger(18446744073709551616 - 1); } {{}} do_execsql_test func4-1.48 { SELECT tointeger(18446744073709551616); } {{}} do_execsql_test func4-1.49 { SELECT tointeger(18446744073709551616 + 1); } {{}} ifcapable floatingpoint { set i 0 do_execsql_test func4-2.1 { SELECT toreal(NULL); } {{}} do_execsql_test func4-2.2 { SELECT toreal(''); } {{}} do_execsql_test func4-2.3 { SELECT toreal(' '); } {{}} do_execsql_test func4-2.4 { SELECT toreal('1234'); } {1234.0} do_execsql_test func4-2.5 { SELECT toreal(' 1234'); } {1234.0} do_execsql_test func4-2.6 { SELECT toreal('bad'); } {{}} do_execsql_test func4-2.7 { SELECT toreal('0xBAD'); } {{}} do_execsql_test func4-2.8 { SELECT toreal('123BAD'); } {{}} do_execsql_test func4-2.9 { SELECT toreal('0x123BAD'); } {{}} do_execsql_test func4-2.10 { SELECT toreal('123NO'); } {{}} do_execsql_test func4-2.11 { SELECT toreal('0x123NO'); } {{}} do_execsql_test func4-2.12 { SELECT toreal('-0x1'); } {{}} do_execsql_test func4-2.13 { SELECT toreal('-0x0'); } {{}} do_execsql_test func4-2.14 { SELECT toreal('0x0'); } {{}} do_execsql_test func4-2.15 { SELECT toreal('0x1'); } {{}} do_execsql_test func4-2.16 { SELECT toreal(-1); } {-1.0} do_execsql_test func4-2.17 { SELECT toreal(-0); } {0.0} do_execsql_test func4-2.18 { SELECT toreal(0); } {0.0} do_execsql_test func4-2.19 { SELECT toreal(1); } {1.0} do_execsql_test func4-2.20 { SELECT toreal(-1.79769313486232e308 - 1); } {-Inf} do_execsql_test func4-2.21 { SELECT toreal(-1.79769313486232e308); } {-Inf} do_execsql_test func4-2.22 { SELECT toreal(-1.79769313486232e308 + 1); } {-Inf} do_execsql_test func4-2.23 { SELECT toreal(-9223372036854775808 - 1); } {-9.22337203685478e+18} do_execsql_test func4-2.24 { SELECT toreal(-9223372036854775808); } {-9.22337203685478e+18} do_execsql_test func4-2.25 { SELECT toreal(-9223372036854775808 + 1); } {-9.22337203685478e+18} do_execsql_test func4-2.26 { SELECT toreal(-2147483648 - 1); } {-2147483649.0} do_execsql_test func4-2.27 { SELECT toreal(-2147483648); } {-2147483648.0} do_execsql_test func4-2.28 { SELECT toreal(-2147483648 + 1); } {-2147483647.0} do_execsql_test func4-2.29 { SELECT toreal(2147483647 - 1); } {2147483646.0} do_execsql_test func4-2.30 { SELECT toreal(2147483647); } {2147483647.0} do_execsql_test func4-2.31 { SELECT toreal(2147483647 + 1); } {2147483648.0} do_execsql_test func4-2.32 { SELECT toreal(9223372036854775807 - 1); } {9.22337203685478e+18} do_execsql_test func4-2.33 { SELECT toreal(9223372036854775807); } {9.22337203685478e+18} do_execsql_test func4-2.34 { SELECT toreal(9223372036854775807 + 1); } {9.22337203685478e+18} do_execsql_test func4-2.35 { SELECT toreal(1.79769313486232e308 - 1); } {Inf} do_execsql_test func4-2.36 { SELECT toreal(1.79769313486232e308); } {Inf} do_execsql_test func4-2.37 { SELECT toreal(1.79769313486232e308 + 1); } {Inf} do_execsql_test func4-2.38 { SELECT toreal(4503599627370496 - 1); } {4503599627370500.0} do_execsql_test func4-2.39 { SELECT toreal(4503599627370496); } {4503599627370500.0} do_execsql_test func4-2.40 { SELECT toreal(4503599627370496 + 1); } {4503599627370500.0} do_execsql_test func4-2.41 { SELECT toreal(9007199254740992 - 1); } {9007199254740990.0} do_execsql_test func4-2.42 { SELECT toreal(9007199254740992); } {9007199254740990.0} do_execsql_test func4-2.43 { SELECT toreal(9007199254740992 + 1); } {9007199254740990.0} do_execsql_test func4-2.44 { SELECT toreal(9223372036854775808 - 1); } {9.22337203685478e+18} do_execsql_test func4-2.45 { SELECT toreal(9223372036854775808); } {9.22337203685478e+18} do_execsql_test func4-2.46 { SELECT toreal(9223372036854775808 + 1); } {9.22337203685478e+18} do_execsql_test func4-2.47 { SELECT toreal(18446744073709551616 - 1); } {1.84467440737096e+19} do_execsql_test func4-2.48 { SELECT toreal(18446744073709551616); } {1.84467440737096e+19} do_execsql_test func4-2.49 { SELECT toreal(18446744073709551616 + 1); } {1.84467440737096e+19} } ifcapable check { set i 0 do_execsql_test func4-3.1 { CREATE TABLE t1( x INTEGER CHECK(tointeger(x) IS NOT NULL AND x = CAST(x AS INTEGER)) ); } {} do_test func4-3.2 { catchsql { INSERT INTO t1 (x) VALUES (NULL); } } {1 {constraint failed}} do_test func4-3.3 { catchsql { INSERT INTO t1 (x) VALUES (NULL); } } {1 {constraint failed}} do_test func4-3.4 { catchsql { INSERT INTO t1 (x) VALUES (''); } } {1 {constraint failed}} do_test func4-3.5 { catchsql { INSERT INTO t1 (x) VALUES ('bad'); } } {1 {constraint failed}} do_test func4-3.6 { catchsql { INSERT INTO t1 (x) VALUES ('1234bad'); } } {1 {constraint failed}} do_test func4-3.7 { catchsql { INSERT INTO t1 (x) VALUES ('1234.56bad'); } } {1 {constraint failed}} do_test func4-3.8 { catchsql { INSERT INTO t1 (x) VALUES (1234); } } {0 {}} do_test func4-3.9 { catchsql { INSERT INTO t1 (x) VALUES (1234.56); } } {1 {constraint failed}} do_test func4-3.10 { catchsql { INSERT INTO t1 (x) VALUES ('1234'); } } {0 {}} do_test func4-3.11 { catchsql { INSERT INTO t1 (x) VALUES ('1234.56'); } } {1 {constraint failed}} do_test func4-3.12 { catchsql { INSERT INTO t1 (x) VALUES (ZEROBLOB(4)); } } {1 {constraint failed}} do_test func4-3.13 { catchsql { INSERT INTO t1 (x) VALUES (X''); } } {1 {constraint failed}} do_test func4-3.14 { catchsql { INSERT INTO t1 (x) VALUES (X'1234'); } } {1 {constraint failed}} do_test func4-3.15 { catchsql { INSERT INTO t1 (x) VALUES (X'12345678'); } } {1 {constraint failed}} do_execsql_test func4-3.16 { SELECT x FROM t1 ORDER BY x; } {1234 1234} ifcapable floatingpoint { set i 0 do_execsql_test func4-4.1 { CREATE TABLE t2( x REAL CHECK(toreal(x) IS NOT NULL) ); } {} do_test func4-4.2 { catchsql { INSERT INTO t2 (x) VALUES (NULL); } } {1 {constraint failed}} do_test func4-4.3 { catchsql { INSERT INTO t2 (x) VALUES (NULL); } } {1 {constraint failed}} do_test func4-4.4 { catchsql { INSERT INTO t2 (x) VALUES (''); } } {1 {constraint failed}} do_test func4-4.5 { catchsql { INSERT INTO t2 (x) VALUES ('bad'); } } {1 {constraint failed}} do_test func4-4.6 { catchsql { INSERT INTO t2 (x) VALUES ('1234bad'); } } {1 {constraint failed}} do_test func4-4.7 { catchsql { INSERT INTO t2 (x) VALUES ('1234.56bad'); } } {1 {constraint failed}} do_test func4-4.8 { catchsql { INSERT INTO t2 (x) VALUES (1234); } } {0 {}} do_test func4-4.9 { catchsql { INSERT INTO t2 (x) VALUES (1234.56); } } {0 {}} do_test func4-4.10 { catchsql { INSERT INTO t2 (x) VALUES ('1234'); } } {0 {}} do_test func4-4.11 { catchsql { INSERT INTO t2 (x) VALUES ('1234.56'); } } {0 {}} do_test func4-4.12 { catchsql { INSERT INTO t2 (x) VALUES (ZEROBLOB(4)); } } {1 {constraint failed}} do_test func4-4.13 { catchsql { INSERT INTO t2 (x) VALUES (X''); } } {1 {constraint failed}} do_test func4-4.14 { catchsql { INSERT INTO t2 (x) VALUES (X'1234'); } } {1 {constraint failed}} do_test func4-4.15 { catchsql { INSERT INTO t2 (x) VALUES (X'12345678'); } } {1 {constraint failed}} do_execsql_test func4-4.16 { SELECT x FROM t2 ORDER BY x; } {1234.0 1234.0 1234.56 1234.56} } } finish_test