1453b576eSBram Moolenaar" test float functions 2453b576eSBram Moolenaar 3453b576eSBram Moolenaarif !has('float') 4453b576eSBram Moolenaar finish 5453b576eSBram Moolenaarend 6453b576eSBram Moolenaar 7453b576eSBram Moolenaarfunc Test_abs() 862473611SBram Moolenaar call assert_equal('1.23', string(abs(1.23))) 962473611SBram Moolenaar call assert_equal('1.23', string(abs(-1.23))) 1062473611SBram Moolenaar call assert_equal('0.0', string(abs(0.0))) 1162473611SBram Moolenaar call assert_equal('0.0', string(abs(1.0/(1.0/0.0)))) 1262473611SBram Moolenaar call assert_equal('0.0', string(abs(-1.0/(1.0/0.0)))) 1362473611SBram Moolenaar call assert_equal('inf', string(abs(1.0/0.0))) 1462473611SBram Moolenaar call assert_equal('inf', string(abs(-1.0/0.0))) 1562473611SBram Moolenaar call assert_equal('nan', string(abs(0.0/0.0))) 16*87200413SBram Moolenaar call assert_equal('12', string(abs('-12abc'))) 17*87200413SBram Moolenaar call assert_fails("call abs([])", 'E745:') 18*87200413SBram Moolenaar call assert_fails("call abs({})", 'E728:') 19*87200413SBram Moolenaar call assert_fails("call abs(function('string'))", 'E703:') 20453b576eSBram Moolenaarendfunc 21453b576eSBram Moolenaar 22453b576eSBram Moolenaarfunc Test_sqrt() 2362473611SBram Moolenaar call assert_equal('0.0', string(sqrt(0.0))) 2462473611SBram Moolenaar call assert_equal('1.414214', string(sqrt(2.0))) 2562473611SBram Moolenaar call assert_equal('inf', string(sqrt(1.0/0.0))) 2662473611SBram Moolenaar call assert_equal('nan', string(sqrt(-1.0))) 2762473611SBram Moolenaar call assert_equal('nan', string(sqrt(0.0/0.0))) 28*87200413SBram Moolenaar call assert_fails('call sqrt("")', 'E808:') 29453b576eSBram Moolenaarendfunc 30453b576eSBram Moolenaar 31453b576eSBram Moolenaarfunc Test_log() 3262473611SBram Moolenaar call assert_equal('0.0', string(log(1.0))) 3362473611SBram Moolenaar call assert_equal('-0.693147', string(log(0.5))) 3462473611SBram Moolenaar call assert_equal('-inf', string(log(0.0))) 3562473611SBram Moolenaar call assert_equal('nan', string(log(-1.0))) 3662473611SBram Moolenaar call assert_equal('inf', string(log(1.0/0.0))) 3762473611SBram Moolenaar call assert_equal('nan', string(log(0.0/0.0))) 38*87200413SBram Moolenaar call assert_fails('call log("")', 'E808:') 39453b576eSBram Moolenaarendfunc 40453b576eSBram Moolenaar 41453b576eSBram Moolenaarfunc Test_log10() 4262473611SBram Moolenaar call assert_equal('0.0', string(log10(1.0))) 4362473611SBram Moolenaar call assert_equal('2.0', string(log10(100.0))) 4462473611SBram Moolenaar call assert_equal('2.079181', string(log10(120.0))) 4562473611SBram Moolenaar call assert_equal('-inf', string(log10(0.0))) 4662473611SBram Moolenaar call assert_equal('nan', string(log10(-1.0))) 4762473611SBram Moolenaar call assert_equal('inf', string(log10(1.0/0.0))) 4862473611SBram Moolenaar call assert_equal('nan', string(log10(0.0/0.0))) 49*87200413SBram Moolenaar call assert_fails('call log10("")', 'E808:') 50453b576eSBram Moolenaarendfunc 51453b576eSBram Moolenaar 52453b576eSBram Moolenaarfunc Test_exp() 5362473611SBram Moolenaar call assert_equal('1.0', string(exp(0.0))) 5462473611SBram Moolenaar call assert_equal('7.389056', string(exp(2.0))) 5562473611SBram Moolenaar call assert_equal('0.367879', string(exp(-1.0))) 5662473611SBram Moolenaar call assert_equal('inf', string(exp(1.0/0.0))) 5762473611SBram Moolenaar call assert_equal('0.0', string(exp(-1.0/0.0))) 5862473611SBram Moolenaar call assert_equal('nan', string(exp(0.0/0.0))) 59*87200413SBram Moolenaar call assert_fails('call exp("")', 'E808:') 60453b576eSBram Moolenaarendfunc 61453b576eSBram Moolenaar 62453b576eSBram Moolenaarfunc Test_sin() 6362473611SBram Moolenaar call assert_equal('0.0', string(sin(0.0))) 6462473611SBram Moolenaar call assert_equal('0.841471', string(sin(1.0))) 6562473611SBram Moolenaar call assert_equal('-0.479426', string(sin(-0.5))) 6662473611SBram Moolenaar call assert_equal('nan', string(sin(0.0/0.0))) 6762473611SBram Moolenaar call assert_equal('nan', string(sin(1.0/0.0))) 6862473611SBram Moolenaar call assert_equal('0.0', string(sin(1.0/(1.0/0.0)))) 6962473611SBram Moolenaar call assert_equal('-0.0', string(sin(-1.0/(1.0/0.0)))) 70*87200413SBram Moolenaar call assert_fails('call sin("")', 'E808:') 71453b576eSBram Moolenaarendfunc 72453b576eSBram Moolenaar 73453b576eSBram Moolenaarfunc Test_asin() 7462473611SBram Moolenaar call assert_equal('0.0', string(asin(0.0))) 7562473611SBram Moolenaar call assert_equal('1.570796', string(asin(1.0))) 7662473611SBram Moolenaar call assert_equal('-0.523599', string(asin(-0.5))) 7762473611SBram Moolenaar call assert_equal('nan', string(asin(1.1))) 7862473611SBram Moolenaar call assert_equal('nan', string(asin(1.0/0.0))) 7962473611SBram Moolenaar call assert_equal('nan', string(asin(0.0/0.0))) 80*87200413SBram Moolenaar call assert_fails('call asin("")', 'E808:') 81453b576eSBram Moolenaarendfunc 82453b576eSBram Moolenaar 83453b576eSBram Moolenaarfunc Test_sinh() 8462473611SBram Moolenaar call assert_equal('0.0', string(sinh(0.0))) 8562473611SBram Moolenaar call assert_equal('0.521095', string(sinh(0.5))) 8662473611SBram Moolenaar call assert_equal('-1.026517', string(sinh(-0.9))) 8762473611SBram Moolenaar call assert_equal('inf', string(sinh(1.0/0.0))) 8862473611SBram Moolenaar call assert_equal('-inf', string(sinh(-1.0/0.0))) 8962473611SBram Moolenaar call assert_equal('nan', string(sinh(0.0/0.0))) 90*87200413SBram Moolenaar call assert_fails('call sinh("")', 'E808:') 91453b576eSBram Moolenaarendfunc 92453b576eSBram Moolenaar 93453b576eSBram Moolenaarfunc Test_cos() 9462473611SBram Moolenaar call assert_equal('1.0', string(cos(0.0))) 9562473611SBram Moolenaar call assert_equal('0.540302', string(cos(1.0))) 9662473611SBram Moolenaar call assert_equal('0.877583', string(cos(-0.5))) 9762473611SBram Moolenaar call assert_equal('nan', string(cos(0.0/0.0))) 9862473611SBram Moolenaar call assert_equal('nan', string(cos(1.0/0.0))) 99*87200413SBram Moolenaar call assert_fails('call cos("")', 'E808:') 100453b576eSBram Moolenaarendfunc 101453b576eSBram Moolenaar 102453b576eSBram Moolenaarfunc Test_acos() 10362473611SBram Moolenaar call assert_equal('1.570796', string(acos(0.0))) 10462473611SBram Moolenaar call assert_equal('0.0', string(acos(1.0))) 10562473611SBram Moolenaar call assert_equal('3.141593', string(acos(-1.0))) 10662473611SBram Moolenaar call assert_equal('2.094395', string(acos(-0.5))) 10762473611SBram Moolenaar call assert_equal('nan', string(acos(1.1))) 10862473611SBram Moolenaar call assert_equal('nan', string(acos(1.0/0.0))) 10962473611SBram Moolenaar call assert_equal('nan', string(acos(0.0/0.0))) 110*87200413SBram Moolenaar call assert_fails('call acos("")', 'E808:') 111453b576eSBram Moolenaarendfunc 112453b576eSBram Moolenaar 113453b576eSBram Moolenaarfunc Test_cosh() 11462473611SBram Moolenaar call assert_equal('1.0', string(cosh(0.0))) 11562473611SBram Moolenaar call assert_equal('1.127626', string(cosh(0.5))) 11662473611SBram Moolenaar call assert_equal('inf', string(cosh(1.0/0.0))) 11762473611SBram Moolenaar call assert_equal('inf', string(cosh(-1.0/0.0))) 11862473611SBram Moolenaar call assert_equal('nan', string(cosh(0.0/0.0))) 119*87200413SBram Moolenaar call assert_fails('call cosh("")', 'E808:') 120453b576eSBram Moolenaarendfunc 121453b576eSBram Moolenaar 122453b576eSBram Moolenaarfunc Test_tan() 12362473611SBram Moolenaar call assert_equal('0.0', string(tan(0.0))) 12462473611SBram Moolenaar call assert_equal('0.546302', string(tan(0.5))) 12562473611SBram Moolenaar call assert_equal('-0.546302', string(tan(-0.5))) 12662473611SBram Moolenaar call assert_equal('nan', string(tan(1.0/0.0))) 12762473611SBram Moolenaar call assert_equal('nan', string(cos(0.0/0.0))) 12862473611SBram Moolenaar call assert_equal('0.0', string(tan(1.0/(1.0/0.0)))) 12962473611SBram Moolenaar call assert_equal('-0.0', string(tan(-1.0/(1.0/0.0)))) 130*87200413SBram Moolenaar call assert_fails('call tan("")', 'E808:') 131453b576eSBram Moolenaarendfunc 132453b576eSBram Moolenaar 133453b576eSBram Moolenaarfunc Test_atan() 13462473611SBram Moolenaar call assert_equal('0.0', string(atan(0.0))) 13562473611SBram Moolenaar call assert_equal('0.463648', string(atan(0.5))) 13662473611SBram Moolenaar call assert_equal('-0.785398', string(atan(-1.0))) 13762473611SBram Moolenaar call assert_equal('1.570796', string(atan(1.0/0.0))) 13862473611SBram Moolenaar call assert_equal('-1.570796', string(atan(-1.0/0.0))) 13962473611SBram Moolenaar call assert_equal('nan', string(atan(0.0/0.0))) 140*87200413SBram Moolenaar call assert_fails('call atan("")', 'E808:') 141453b576eSBram Moolenaarendfunc 142453b576eSBram Moolenaar 143453b576eSBram Moolenaarfunc Test_atan2() 14462473611SBram Moolenaar call assert_equal('-2.356194', string(atan2(-1, -1))) 14562473611SBram Moolenaar call assert_equal('2.356194', string(atan2(1, -1))) 14662473611SBram Moolenaar call assert_equal('0.0', string(atan2(1.0, 1.0/0.0))) 14762473611SBram Moolenaar call assert_equal('1.570796', string(atan2(1.0/0.0, 1.0))) 14862473611SBram Moolenaar call assert_equal('nan', string(atan2(0.0/0.0, 1.0))) 149*87200413SBram Moolenaar call assert_fails('call atan2("", -1)', 'E808:') 150*87200413SBram Moolenaar call assert_fails('call atan2(-1, "")', 'E808:') 151453b576eSBram Moolenaarendfunc 152453b576eSBram Moolenaar 153453b576eSBram Moolenaarfunc Test_tanh() 15462473611SBram Moolenaar call assert_equal('0.0', string(tanh(0.0))) 15562473611SBram Moolenaar call assert_equal('0.462117', string(tanh(0.5))) 15662473611SBram Moolenaar call assert_equal('-0.761594', string(tanh(-1.0))) 15762473611SBram Moolenaar call assert_equal('1.0', string(tanh(1.0/0.0))) 15862473611SBram Moolenaar call assert_equal('-1.0', string(tanh(-1.0/0.0))) 15962473611SBram Moolenaar call assert_equal('nan', string(tanh(0.0/0.0))) 160*87200413SBram Moolenaar call assert_fails('call tanh("")', 'E808:') 161453b576eSBram Moolenaarendfunc 162453b576eSBram Moolenaar 163453b576eSBram Moolenaarfunc Test_fmod() 16462473611SBram Moolenaar call assert_equal('0.13', string(fmod(12.33, 1.22))) 16562473611SBram Moolenaar call assert_equal('-0.13', string(fmod(-12.33, 1.22))) 16662473611SBram Moolenaar call assert_equal('nan', string(fmod(1.0/0.0, 1.0))) 16762473611SBram Moolenaar " On Windows we get "nan" instead of 1.0, accept both. 16862473611SBram Moolenaar let res = string(fmod(1.0, 1.0/0.0)) 16962473611SBram Moolenaar if res != 'nan' 17062473611SBram Moolenaar call assert_equal('1.0', res) 17162473611SBram Moolenaar endif 17262473611SBram Moolenaar call assert_equal('nan', string(fmod(1.0, 0.0))) 173*87200413SBram Moolenaar call assert_fails("call fmod('', 1.22)", 'E808:') 174*87200413SBram Moolenaar call assert_fails("call fmod(12.33, '')", 'E808:') 175453b576eSBram Moolenaarendfunc 176453b576eSBram Moolenaar 177453b576eSBram Moolenaarfunc Test_pow() 17862473611SBram Moolenaar call assert_equal('1.0', string(pow(0.0, 0.0))) 17962473611SBram Moolenaar call assert_equal('8.0', string(pow(2.0, 3.0))) 18062473611SBram Moolenaar call assert_equal('nan', string(pow(2.0, 0.0/0.0))) 18162473611SBram Moolenaar call assert_equal('nan', string(pow(0.0/0.0, 3.0))) 18262473611SBram Moolenaar call assert_equal('nan', string(pow(0.0/0.0, 3.0))) 18362473611SBram Moolenaar call assert_equal('inf', string(pow(2.0, 1.0/0.0))) 18462473611SBram Moolenaar call assert_equal('inf', string(pow(1.0/0.0, 3.0))) 185*87200413SBram Moolenaar call assert_fails("call pow('', 2.0)", 'E808:') 186*87200413SBram Moolenaar call assert_fails("call pow(2.0, '')", 'E808:') 187453b576eSBram Moolenaarendfunc 188453b576eSBram Moolenaar 189453b576eSBram Moolenaarfunc Test_str2float() 19062473611SBram Moolenaar call assert_equal('1.0', string(str2float('1'))) 19108243d26SBram Moolenaar call assert_equal('1.0', string(str2float(' 1 '))) 19208243d26SBram Moolenaar call assert_equal('1.0', string(str2float(' 1.0 '))) 19362473611SBram Moolenaar call assert_equal('1.23', string(str2float('1.23'))) 19462473611SBram Moolenaar call assert_equal('1.23', string(str2float('1.23abc'))) 19562473611SBram Moolenaar call assert_equal('1.0e40', string(str2float('1e40'))) 196*87200413SBram Moolenaar call assert_equal('-1.23', string(str2float('-1.23'))) 197*87200413SBram Moolenaar call assert_equal('1.23', string(str2float(' + 1.23 '))) 19808243d26SBram Moolenaar 19908243d26SBram Moolenaar call assert_equal('1.0', string(str2float('+1'))) 20008243d26SBram Moolenaar call assert_equal('1.0', string(str2float('+1'))) 20108243d26SBram Moolenaar call assert_equal('1.0', string(str2float(' +1 '))) 20208243d26SBram Moolenaar call assert_equal('1.0', string(str2float(' + 1 '))) 20308243d26SBram Moolenaar 20408243d26SBram Moolenaar call assert_equal('-1.0', string(str2float('-1'))) 20508243d26SBram Moolenaar call assert_equal('-1.0', string(str2float('-1'))) 20608243d26SBram Moolenaar call assert_equal('-1.0', string(str2float(' -1 '))) 20708243d26SBram Moolenaar call assert_equal('-1.0', string(str2float(' - 1 '))) 20808243d26SBram Moolenaar 209*87200413SBram Moolenaar call assert_equal('0.0', string(str2float('+0.0'))) 210*87200413SBram Moolenaar call assert_equal('-0.0', string(str2float('-0.0'))) 21162473611SBram Moolenaar call assert_equal('inf', string(str2float('1e1000'))) 21262473611SBram Moolenaar call assert_equal('inf', string(str2float('inf'))) 21362473611SBram Moolenaar call assert_equal('-inf', string(str2float('-inf'))) 214*87200413SBram Moolenaar call assert_equal('inf', string(str2float('+inf'))) 21562473611SBram Moolenaar call assert_equal('inf', string(str2float('Inf'))) 216*87200413SBram Moolenaar call assert_equal('inf', string(str2float(' +inf '))) 21762473611SBram Moolenaar call assert_equal('nan', string(str2float('nan'))) 21862473611SBram Moolenaar call assert_equal('nan', string(str2float('NaN'))) 219*87200413SBram Moolenaar call assert_equal('nan', string(str2float(' nan '))) 220*87200413SBram Moolenaar 221*87200413SBram Moolenaar call assert_fails("call str2float(1.2)", 'E806:') 222*87200413SBram Moolenaar call assert_fails("call str2float([])", 'E730:') 223*87200413SBram Moolenaar call assert_fails("call str2float({})", 'E731:') 224*87200413SBram Moolenaar call assert_fails("call str2float(function('string'))", 'E729:') 225453b576eSBram Moolenaarendfunc 226453b576eSBram Moolenaar 227453b576eSBram Moolenaarfunc Test_floor() 22862473611SBram Moolenaar call assert_equal('2.0', string(floor(2.0))) 22962473611SBram Moolenaar call assert_equal('2.0', string(floor(2.11))) 23062473611SBram Moolenaar call assert_equal('2.0', string(floor(2.99))) 23162473611SBram Moolenaar call assert_equal('-3.0', string(floor(-2.11))) 23262473611SBram Moolenaar call assert_equal('-3.0', string(floor(-2.99))) 23362473611SBram Moolenaar call assert_equal('nan', string(floor(0.0/0.0))) 23462473611SBram Moolenaar call assert_equal('inf', string(floor(1.0/0.0))) 23562473611SBram Moolenaar call assert_equal('-inf', string(floor(-1.0/0.0))) 236*87200413SBram Moolenaar call assert_fails("call floor('')", 'E808:') 237453b576eSBram Moolenaarendfunc 238453b576eSBram Moolenaar 239453b576eSBram Moolenaarfunc Test_ceil() 24062473611SBram Moolenaar call assert_equal('2.0', string(ceil(2.0))) 24162473611SBram Moolenaar call assert_equal('3.0', string(ceil(2.11))) 24262473611SBram Moolenaar call assert_equal('3.0', string(ceil(2.99))) 24362473611SBram Moolenaar call assert_equal('-2.0', string(ceil(-2.11))) 24462473611SBram Moolenaar call assert_equal('-2.0', string(ceil(-2.99))) 24562473611SBram Moolenaar call assert_equal('nan', string(ceil(0.0/0.0))) 24662473611SBram Moolenaar call assert_equal('inf', string(ceil(1.0/0.0))) 24762473611SBram Moolenaar call assert_equal('-inf', string(ceil(-1.0/0.0))) 248*87200413SBram Moolenaar call assert_fails("call ceil('')", 'E808:') 249453b576eSBram Moolenaarendfunc 250453b576eSBram Moolenaar 251453b576eSBram Moolenaarfunc Test_round() 25262473611SBram Moolenaar call assert_equal('2.0', string(round(2.1))) 25362473611SBram Moolenaar call assert_equal('3.0', string(round(2.5))) 25462473611SBram Moolenaar call assert_equal('3.0', string(round(2.9))) 25562473611SBram Moolenaar call assert_equal('-2.0', string(round(-2.1))) 25662473611SBram Moolenaar call assert_equal('-3.0', string(round(-2.5))) 25762473611SBram Moolenaar call assert_equal('-3.0', string(round(-2.9))) 25862473611SBram Moolenaar call assert_equal('nan', string(round(0.0/0.0))) 25962473611SBram Moolenaar call assert_equal('inf', string(round(1.0/0.0))) 26062473611SBram Moolenaar call assert_equal('-inf', string(round(-1.0/0.0))) 261*87200413SBram Moolenaar call assert_fails("call round('')", 'E808:') 262453b576eSBram Moolenaarendfunc 263453b576eSBram Moolenaar 264453b576eSBram Moolenaarfunc Test_trunc() 26562473611SBram Moolenaar call assert_equal('2.0', string(trunc(2.1))) 26662473611SBram Moolenaar call assert_equal('2.0', string(trunc(2.5))) 26762473611SBram Moolenaar call assert_equal('2.0', string(trunc(2.9))) 26862473611SBram Moolenaar call assert_equal('-2.0', string(trunc(-2.1))) 26962473611SBram Moolenaar call assert_equal('-2.0', string(trunc(-2.5))) 27062473611SBram Moolenaar call assert_equal('-2.0', string(trunc(-2.9))) 27162473611SBram Moolenaar call assert_equal('nan', string(trunc(0.0/0.0))) 27262473611SBram Moolenaar call assert_equal('inf', string(trunc(1.0/0.0))) 27362473611SBram Moolenaar call assert_equal('-inf', string(trunc(-1.0/0.0))) 274*87200413SBram Moolenaar call assert_fails("call trunc('')", 'E808:') 275453b576eSBram Moolenaarendfunc 276453b576eSBram Moolenaar 277453b576eSBram Moolenaarfunc Test_isnan() 27862473611SBram Moolenaar call assert_equal(0, isnan(1.0)) 27962473611SBram Moolenaar call assert_equal(1, isnan(0.0/0.0)) 28062473611SBram Moolenaar call assert_equal(0, isnan(1.0/0.0)) 28162473611SBram Moolenaar call assert_equal(0, isnan('a')) 28262473611SBram Moolenaar call assert_equal(0, isnan([])) 283*87200413SBram Moolenaar call assert_equal(0, isnan({})) 284453b576eSBram Moolenaarendfunc 285