1# 2020-12-07 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# Test cases for SQL functions based off the standard math library 13# 14set testdir [file dirname $argv0] 15source $testdir/tester.tcl 16ifcapable !mathlib { 17 finish_test 18 return 19} 20 21do_execsql_test func7-100 { 22 SELECT ceil(99.9), ceiling(-99.01), floor(17), floor(-17.99); 23} {100.0 -99.0 17 -18.0} 24do_execsql_test func7-110 { 25 SELECT quote(ceil(NULL)), ceil('-99.99'); 26} {NULL -99.0} 27do_execsql_test func7-200 { 28 SELECT round(ln(5),2), log(100.0), log(100), log(2,'256'); 29} {1.61 2.0 2.0 8.0} 30do_execsql_test func7-210 { 31 SELECT ln(-5), log(-5,100.0); 32} {{} {}} 33 34# Test cases derived from PostgreSQL documentation 35# 36do_execsql_test func7-pg-100 { 37 SELECT abs(-17.4) 38} {17.4} 39do_execsql_test func7-pg-110 { 40 SELECT ceil(42.2) 41} {43.0} 42do_execsql_test func7-pg-120 { 43 SELECT ceil(-42.2) 44} {-42.0} 45do_execsql_test func7-pg-130 { 46 SELECT round(exp(1.0),7) 47} {2.7182818} 48do_execsql_test func7-pg-140 { 49 SELECT floor(42.8) 50} {42.0} 51do_execsql_test func7-pg-150 { 52 SELECT floor(-42.8) 53} {-43.0} 54do_execsql_test func7-pg-160 { 55 SELECT round(ln(2.0),7) 56} {0.6931472} 57do_execsql_test func7-pg-170 { 58 SELECT log(100.0) 59} {2.0} 60do_execsql_test func7-pg-180 { 61 SELECT log10(1000.0) 62} {3.0} 63do_execsql_test func7-pg-190 { 64 SELECT log(2.0, 64.0) 65} {6.0} 66do_execsql_test func7-pg-200 { 67 SELECT mod(9,4); 68} {1.0} 69do_execsql_test func7-pg-210 { 70 SELECT round(pi(),7); 71} {3.1415927} 72do_execsql_test func7-pg-220 { 73 SELECT power(9,3); 74} {729.0} 75do_execsql_test func7-pg-230 { 76 SELECT round(radians(45.0),7); 77} {0.7853982} 78do_execsql_test func7-pg-240 { 79 SELECT round(42.4); 80} {42.0} 81do_execsql_test func7-pg-250 { 82 SELECT round(42.4382,2); 83} {42.44} 84do_execsql_test func7-pg-260 { 85 SELECT sign(-8.4); 86} {-1} 87do_execsql_test func7-pg-270 { 88 SELECT round( sqrt(2), 7); 89} {1.4142136} 90do_execsql_test func7-pg-280 { 91 SELECT trunc(42.8), trunc(-42.8); 92} {42.0 -42.0} 93do_execsql_test func7-pg-300 { 94 SELECT acos(1); 95} {0.0} 96do_execsql_test func7-pg-301 { 97 SELECT degrees(acos(0.5)); 98} {60.0} 99do_execsql_test func7-pg-310 { 100 SELECT round( asin(1), 7); 101} {1.5707963} 102do_execsql_test func7-pg-311 { 103 SELECT degrees( asin(0.5) ); 104} {30.0} 105do_execsql_test func7-pg-320 { 106 SELECT round( atan(1), 7); 107} {0.7853982} 108do_execsql_test func7-pg-321 { 109 SELECT degrees( atan(1) ); 110} {45.0} 111do_execsql_test func7-pg-330 { 112 SELECT round( atan2(1,0), 7); 113} {1.5707963} 114do_execsql_test func7-pg-331 { 115 SELECT degrees( atan2(1,0) ); 116} {90.0} 117do_execsql_test func7-pg-400 { 118 SELECT cos(0); 119} {1.0} 120do_execsql_test func7-pg-401 { 121 SELECT cos( radians(60.0) ); 122} {0.5} 123do_execsql_test func7-pg-400 { 124 SELECT cos(0); 125} {1.0} 126do_execsql_test func7-pg-410 { 127 SELECT round( sin(1), 7); 128} {0.841471} 129do_execsql_test func7-pg-411 { 130 SELECT sin( radians(30) ); 131} {0.5} 132do_execsql_test func7-pg-420 { 133 SELECT round( tan(1), 7); 134} {1.5574077} 135do_execsql_test func7-pg-421 { 136 SELECT tan( radians(45) ); 137} {1.0} 138do_execsql_test func7-pg-500 { 139 SELECT round( sinh(1), 7); 140} {1.1752012} 141do_execsql_test func7-pg-510 { 142 SELECT round( cosh(0), 7); 143} {1.0} 144do_execsql_test func7-pg-520 { 145 SELECT round( tanh(1), 7); 146} {0.7615942} 147do_execsql_test func7-pg-530 { 148 SELECT round( asinh(1), 7); 149} {0.8813736} 150do_execsql_test func7-pg-540 { 151 SELECT round( acosh(1), 7); 152} {0.0} 153do_execsql_test func7-pg-550 { 154 SELECT round( atanh(0.5), 7); 155} {0.5493061} 156 157# Test cases derived from MySQL documentation 158# 159do_execsql_test func7-mysql-100 { 160 SELECT acos(1); 161} {0.0} 162do_execsql_test func7-mysql-110 { 163 SELECT acos(1.0001); 164} {{}} 165do_execsql_test func7-mysql-120 { 166 SELECT round( acos(0.0), 7); 167} {1.5707963} 168do_execsql_test func7-mysql-130 { 169 SELECT round( asin(0.2), 7); 170} {0.2013579} 171do_execsql_test func7-mysql-140 { 172 SELECT asin('foo'); 173} {{}} ;# Note: MySQL returns 0 here, not NULL. 174 # SQLite deliberately returns NULL. 175 # SQLServer and Oracle throw an error. 176do_execsql_test func7-mysql-150 { 177 SELECT round( atan(2), 7), round( atan(-2), 7); 178} {1.1071487 -1.1071487} 179do_execsql_test func7-mysql-160 { 180 SELECT round( atan2(-2,2), 7), round( atan2(pi(),0), 7); 181} {-0.7853982 1.5707963} 182do_execsql_test func7-mysql-170 { 183 SELECT ceiling(1.23), ceiling(-1.23); 184} {2.0 -1.0} 185do_execsql_test func7-mysql-180 { 186 SELECT cos(pi()); 187} {-1.0} 188do_execsql_test func7-mysql-190 { 189 SELECT degrees(pi()), degrees(pi()/2); 190} {180.0 90.0} 191do_execsql_test func7-mysql-190 { 192 SELECT round( exp(2), 7), round( exp(-2), 7), exp(0); 193} {7.3890561 0.1353353 1.0} 194do_execsql_test func7-mysql-200 { 195 SELECT floor(1.23), floor(-1.23); 196} {1.0 -2.0} 197do_execsql_test func7-mysql-210 { 198 SELECT round(ln(2),7), quote(ln(-2)); 199} {0.6931472 NULL} 200#do_execsql_test func7-mysql-220 { 201# SELECT round(log(2),7), log(-2); 202#} {0.6931472 NULL} 203# log() means natural logarithm in MySQL 204do_execsql_test func7-mysql-230 { 205 SELECT log(2,65536), log(10,100), quote(log(1,100)); 206} {16.0 2.0 Inf} 207do_execsql_test func7-mysql-240 { 208 SELECT log2(65536), quote(log2(-100)); 209} {16.0 NULL} 210do_execsql_test func7-mysql-250 { 211 SELECT round(log10(2),7), log10(100), quote(log10(-100)); 212} {0.30103 2.0 NULL} 213do_execsql_test func7-mysql-260 { 214 SELECT mod(234,10), 253%7, mod(29,9), 29%9; 215} {4.0 1 2.0 2} 216do_execsql_test func7-mysql-270 { 217 SELECT mod(34.5,3); 218} {1.5} 219do_execsql_test func7-mysql-280 { 220 SELECT pow(2,2), pow(2,-2); 221} {4.0 0.25} 222do_execsql_test func7-mysql-281 { 223 SELECT power(2,2), power(2,-2); 224} {4.0 0.25} 225do_execsql_test func7-mysql-290 { 226 SELECT round(radians(90),7); 227} {1.5707963} 228do_execsql_test func7-mysql-300 { 229 SELECT sign(-32), sign(0), sign(234); 230} {-1 0 1} 231do_execsql_test func7-mysql-310 { 232 SELECT sin(pi()) BETWEEN -1.0e-15 AND 1.0e-15; 233} {1} 234do_execsql_test func7-mysql-320 { 235 SELECT sqrt(4), round(sqrt(20),7), quote(sqrt(-16)); 236} {2.0 4.472136 NULL} 237do_execsql_test func7-mysql-330 { 238 SELECT tan(pi()) BETWEEN -1.0e-15 AND 1.0e-15; 239} {1} 240do_execsql_test func7-mysql-331 { 241 SELECT round(tan(pi()+1),7); 242} {1.5574077} 243 244 245finish_test 246