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))) 16453b576eSBram Moolenaarendfunc 17453b576eSBram Moolenaar 18453b576eSBram Moolenaarfunc Test_sqrt() 1962473611SBram Moolenaar call assert_equal('0.0', string(sqrt(0.0))) 2062473611SBram Moolenaar call assert_equal('1.414214', string(sqrt(2.0))) 2162473611SBram Moolenaar call assert_equal('inf', string(sqrt(1.0/0.0))) 2262473611SBram Moolenaar call assert_equal('nan', string(sqrt(-1.0))) 2362473611SBram Moolenaar call assert_equal('nan', string(sqrt(0.0/0.0))) 24453b576eSBram Moolenaarendfunc 25453b576eSBram Moolenaar 26453b576eSBram Moolenaarfunc Test_log() 2762473611SBram Moolenaar call assert_equal('0.0', string(log(1.0))) 2862473611SBram Moolenaar call assert_equal('-0.693147', string(log(0.5))) 2962473611SBram Moolenaar call assert_equal('-inf', string(log(0.0))) 3062473611SBram Moolenaar call assert_equal('nan', string(log(-1.0))) 3162473611SBram Moolenaar call assert_equal('inf', string(log(1.0/0.0))) 3262473611SBram Moolenaar call assert_equal('nan', string(log(0.0/0.0))) 33453b576eSBram Moolenaarendfunc 34453b576eSBram Moolenaar 35453b576eSBram Moolenaarfunc Test_log10() 3662473611SBram Moolenaar call assert_equal('0.0', string(log10(1.0))) 3762473611SBram Moolenaar call assert_equal('2.0', string(log10(100.0))) 3862473611SBram Moolenaar call assert_equal('2.079181', string(log10(120.0))) 3962473611SBram Moolenaar call assert_equal('-inf', string(log10(0.0))) 4062473611SBram Moolenaar call assert_equal('nan', string(log10(-1.0))) 4162473611SBram Moolenaar call assert_equal('inf', string(log10(1.0/0.0))) 4262473611SBram Moolenaar call assert_equal('nan', string(log10(0.0/0.0))) 43453b576eSBram Moolenaarendfunc 44453b576eSBram Moolenaar 45453b576eSBram Moolenaarfunc Test_exp() 4662473611SBram Moolenaar call assert_equal('1.0', string(exp(0.0))) 4762473611SBram Moolenaar call assert_equal('7.389056', string(exp(2.0))) 4862473611SBram Moolenaar call assert_equal('0.367879', string(exp(-1.0))) 4962473611SBram Moolenaar call assert_equal('inf', string(exp(1.0/0.0))) 5062473611SBram Moolenaar call assert_equal('0.0', string(exp(-1.0/0.0))) 5162473611SBram Moolenaar call assert_equal('nan', string(exp(0.0/0.0))) 52453b576eSBram Moolenaarendfunc 53453b576eSBram Moolenaar 54453b576eSBram Moolenaarfunc Test_sin() 5562473611SBram Moolenaar call assert_equal('0.0', string(sin(0.0))) 5662473611SBram Moolenaar call assert_equal('0.841471', string(sin(1.0))) 5762473611SBram Moolenaar call assert_equal('-0.479426', string(sin(-0.5))) 5862473611SBram Moolenaar call assert_equal('nan', string(sin(0.0/0.0))) 5962473611SBram Moolenaar call assert_equal('nan', string(sin(1.0/0.0))) 6062473611SBram Moolenaar call assert_equal('0.0', string(sin(1.0/(1.0/0.0)))) 6162473611SBram Moolenaar call assert_equal('-0.0', string(sin(-1.0/(1.0/0.0)))) 62453b576eSBram Moolenaarendfunc 63453b576eSBram Moolenaar 64453b576eSBram Moolenaarfunc Test_asin() 6562473611SBram Moolenaar call assert_equal('0.0', string(asin(0.0))) 6662473611SBram Moolenaar call assert_equal('1.570796', string(asin(1.0))) 6762473611SBram Moolenaar call assert_equal('-0.523599', string(asin(-0.5))) 6862473611SBram Moolenaar call assert_equal('nan', string(asin(1.1))) 6962473611SBram Moolenaar call assert_equal('nan', string(asin(1.0/0.0))) 7062473611SBram Moolenaar call assert_equal('nan', string(asin(0.0/0.0))) 71453b576eSBram Moolenaarendfunc 72453b576eSBram Moolenaar 73453b576eSBram Moolenaarfunc Test_sinh() 7462473611SBram Moolenaar call assert_equal('0.0', string(sinh(0.0))) 7562473611SBram Moolenaar call assert_equal('0.521095', string(sinh(0.5))) 7662473611SBram Moolenaar call assert_equal('-1.026517', string(sinh(-0.9))) 7762473611SBram Moolenaar call assert_equal('inf', string(sinh(1.0/0.0))) 7862473611SBram Moolenaar call assert_equal('-inf', string(sinh(-1.0/0.0))) 7962473611SBram Moolenaar call assert_equal('nan', string(sinh(0.0/0.0))) 80453b576eSBram Moolenaarendfunc 81453b576eSBram Moolenaar 82453b576eSBram Moolenaarfunc Test_cos() 8362473611SBram Moolenaar call assert_equal('1.0', string(cos(0.0))) 8462473611SBram Moolenaar call assert_equal('0.540302', string(cos(1.0))) 8562473611SBram Moolenaar call assert_equal('0.877583', string(cos(-0.5))) 8662473611SBram Moolenaar call assert_equal('nan', string(cos(0.0/0.0))) 8762473611SBram Moolenaar call assert_equal('nan', string(cos(1.0/0.0))) 88453b576eSBram Moolenaarendfunc 89453b576eSBram Moolenaar 90453b576eSBram Moolenaarfunc Test_acos() 9162473611SBram Moolenaar call assert_equal('1.570796', string(acos(0.0))) 9262473611SBram Moolenaar call assert_equal('0.0', string(acos(1.0))) 9362473611SBram Moolenaar call assert_equal('3.141593', string(acos(-1.0))) 9462473611SBram Moolenaar call assert_equal('2.094395', string(acos(-0.5))) 9562473611SBram Moolenaar call assert_equal('nan', string(acos(1.1))) 9662473611SBram Moolenaar call assert_equal('nan', string(acos(1.0/0.0))) 9762473611SBram Moolenaar call assert_equal('nan', string(acos(0.0/0.0))) 98453b576eSBram Moolenaarendfunc 99453b576eSBram Moolenaar 100453b576eSBram Moolenaarfunc Test_cosh() 10162473611SBram Moolenaar call assert_equal('1.0', string(cosh(0.0))) 10262473611SBram Moolenaar call assert_equal('1.127626', string(cosh(0.5))) 10362473611SBram Moolenaar call assert_equal('inf', string(cosh(1.0/0.0))) 10462473611SBram Moolenaar call assert_equal('inf', string(cosh(-1.0/0.0))) 10562473611SBram Moolenaar call assert_equal('nan', string(cosh(0.0/0.0))) 106453b576eSBram Moolenaarendfunc 107453b576eSBram Moolenaar 108453b576eSBram Moolenaarfunc Test_tan() 10962473611SBram Moolenaar call assert_equal('0.0', string(tan(0.0))) 11062473611SBram Moolenaar call assert_equal('0.546302', string(tan(0.5))) 11162473611SBram Moolenaar call assert_equal('-0.546302', string(tan(-0.5))) 11262473611SBram Moolenaar call assert_equal('nan', string(tan(1.0/0.0))) 11362473611SBram Moolenaar call assert_equal('nan', string(cos(0.0/0.0))) 11462473611SBram Moolenaar call assert_equal('0.0', string(tan(1.0/(1.0/0.0)))) 11562473611SBram Moolenaar call assert_equal('-0.0', string(tan(-1.0/(1.0/0.0)))) 116453b576eSBram Moolenaarendfunc 117453b576eSBram Moolenaar 118453b576eSBram Moolenaarfunc Test_atan() 11962473611SBram Moolenaar call assert_equal('0.0', string(atan(0.0))) 12062473611SBram Moolenaar call assert_equal('0.463648', string(atan(0.5))) 12162473611SBram Moolenaar call assert_equal('-0.785398', string(atan(-1.0))) 12262473611SBram Moolenaar call assert_equal('1.570796', string(atan(1.0/0.0))) 12362473611SBram Moolenaar call assert_equal('-1.570796', string(atan(-1.0/0.0))) 12462473611SBram Moolenaar call assert_equal('nan', string(atan(0.0/0.0))) 125453b576eSBram Moolenaarendfunc 126453b576eSBram Moolenaar 127453b576eSBram Moolenaarfunc Test_atan2() 12862473611SBram Moolenaar call assert_equal('-2.356194', string(atan2(-1, -1))) 12962473611SBram Moolenaar call assert_equal('2.356194', string(atan2(1, -1))) 13062473611SBram Moolenaar call assert_equal('0.0', string(atan2(1.0, 1.0/0.0))) 13162473611SBram Moolenaar call assert_equal('1.570796', string(atan2(1.0/0.0, 1.0))) 13262473611SBram Moolenaar call assert_equal('nan', string(atan2(0.0/0.0, 1.0))) 133453b576eSBram Moolenaarendfunc 134453b576eSBram Moolenaar 135453b576eSBram Moolenaarfunc Test_tanh() 13662473611SBram Moolenaar call assert_equal('0.0', string(tanh(0.0))) 13762473611SBram Moolenaar call assert_equal('0.462117', string(tanh(0.5))) 13862473611SBram Moolenaar call assert_equal('-0.761594', string(tanh(-1.0))) 13962473611SBram Moolenaar call assert_equal('1.0', string(tanh(1.0/0.0))) 14062473611SBram Moolenaar call assert_equal('-1.0', string(tanh(-1.0/0.0))) 14162473611SBram Moolenaar call assert_equal('nan', string(tanh(0.0/0.0))) 142453b576eSBram Moolenaarendfunc 143453b576eSBram Moolenaar 144453b576eSBram Moolenaarfunc Test_fmod() 14562473611SBram Moolenaar call assert_equal('0.13', string(fmod(12.33, 1.22))) 14662473611SBram Moolenaar call assert_equal('-0.13', string(fmod(-12.33, 1.22))) 14762473611SBram Moolenaar call assert_equal('nan', string(fmod(1.0/0.0, 1.0))) 14862473611SBram Moolenaar " On Windows we get "nan" instead of 1.0, accept both. 14962473611SBram Moolenaar let res = string(fmod(1.0, 1.0/0.0)) 15062473611SBram Moolenaar if res != 'nan' 15162473611SBram Moolenaar call assert_equal('1.0', res) 15262473611SBram Moolenaar endif 15362473611SBram Moolenaar call assert_equal('nan', string(fmod(1.0, 0.0))) 154453b576eSBram Moolenaarendfunc 155453b576eSBram Moolenaar 156453b576eSBram Moolenaarfunc Test_pow() 15762473611SBram Moolenaar call assert_equal('1.0', string(pow(0.0, 0.0))) 15862473611SBram Moolenaar call assert_equal('8.0', string(pow(2.0, 3.0))) 15962473611SBram Moolenaar call assert_equal('nan', string(pow(2.0, 0.0/0.0))) 16062473611SBram Moolenaar call assert_equal('nan', string(pow(0.0/0.0, 3.0))) 16162473611SBram Moolenaar call assert_equal('nan', string(pow(0.0/0.0, 3.0))) 16262473611SBram Moolenaar call assert_equal('inf', string(pow(2.0, 1.0/0.0))) 16362473611SBram Moolenaar call assert_equal('inf', string(pow(1.0/0.0, 3.0))) 164453b576eSBram Moolenaarendfunc 165453b576eSBram Moolenaar 166453b576eSBram Moolenaarfunc Test_str2float() 16762473611SBram Moolenaar call assert_equal('1.0', string(str2float('1'))) 168*08243d26SBram Moolenaar call assert_equal('1.0', string(str2float(' 1 '))) 169*08243d26SBram Moolenaar call assert_equal('1.0', string(str2float(' 1.0 '))) 17062473611SBram Moolenaar call assert_equal('1.23', string(str2float('1.23'))) 17162473611SBram Moolenaar call assert_equal('1.23', string(str2float('1.23abc'))) 17262473611SBram Moolenaar call assert_equal('1.0e40', string(str2float('1e40'))) 173*08243d26SBram Moolenaar 174*08243d26SBram Moolenaar call assert_equal('1.0', string(str2float('+1'))) 175*08243d26SBram Moolenaar call assert_equal('1.0', string(str2float('+1'))) 176*08243d26SBram Moolenaar call assert_equal('1.0', string(str2float(' +1 '))) 177*08243d26SBram Moolenaar call assert_equal('1.0', string(str2float(' + 1 '))) 178*08243d26SBram Moolenaar 179*08243d26SBram Moolenaar call assert_equal('-1.0', string(str2float('-1'))) 180*08243d26SBram Moolenaar call assert_equal('-1.0', string(str2float('-1'))) 181*08243d26SBram Moolenaar call assert_equal('-1.0', string(str2float(' -1 '))) 182*08243d26SBram Moolenaar call assert_equal('-1.0', string(str2float(' - 1 '))) 183*08243d26SBram Moolenaar 18462473611SBram Moolenaar call assert_equal('inf', string(str2float('1e1000'))) 18562473611SBram Moolenaar call assert_equal('inf', string(str2float('inf'))) 18662473611SBram Moolenaar call assert_equal('-inf', string(str2float('-inf'))) 18762473611SBram Moolenaar call assert_equal('inf', string(str2float('Inf'))) 18862473611SBram Moolenaar call assert_equal('nan', string(str2float('nan'))) 18962473611SBram Moolenaar call assert_equal('nan', string(str2float('NaN'))) 190453b576eSBram Moolenaarendfunc 191453b576eSBram Moolenaar 192453b576eSBram Moolenaarfunc Test_floor() 19362473611SBram Moolenaar call assert_equal('2.0', string(floor(2.0))) 19462473611SBram Moolenaar call assert_equal('2.0', string(floor(2.11))) 19562473611SBram Moolenaar call assert_equal('2.0', string(floor(2.99))) 19662473611SBram Moolenaar call assert_equal('-3.0', string(floor(-2.11))) 19762473611SBram Moolenaar call assert_equal('-3.0', string(floor(-2.99))) 19862473611SBram Moolenaar call assert_equal('nan', string(floor(0.0/0.0))) 19962473611SBram Moolenaar call assert_equal('inf', string(floor(1.0/0.0))) 20062473611SBram Moolenaar call assert_equal('-inf', string(floor(-1.0/0.0))) 201453b576eSBram Moolenaarendfunc 202453b576eSBram Moolenaar 203453b576eSBram Moolenaarfunc Test_ceil() 20462473611SBram Moolenaar call assert_equal('2.0', string(ceil(2.0))) 20562473611SBram Moolenaar call assert_equal('3.0', string(ceil(2.11))) 20662473611SBram Moolenaar call assert_equal('3.0', string(ceil(2.99))) 20762473611SBram Moolenaar call assert_equal('-2.0', string(ceil(-2.11))) 20862473611SBram Moolenaar call assert_equal('-2.0', string(ceil(-2.99))) 20962473611SBram Moolenaar call assert_equal('nan', string(ceil(0.0/0.0))) 21062473611SBram Moolenaar call assert_equal('inf', string(ceil(1.0/0.0))) 21162473611SBram Moolenaar call assert_equal('-inf', string(ceil(-1.0/0.0))) 212453b576eSBram Moolenaarendfunc 213453b576eSBram Moolenaar 214453b576eSBram Moolenaarfunc Test_round() 21562473611SBram Moolenaar call assert_equal('2.0', string(round(2.1))) 21662473611SBram Moolenaar call assert_equal('3.0', string(round(2.5))) 21762473611SBram Moolenaar call assert_equal('3.0', string(round(2.9))) 21862473611SBram Moolenaar call assert_equal('-2.0', string(round(-2.1))) 21962473611SBram Moolenaar call assert_equal('-3.0', string(round(-2.5))) 22062473611SBram Moolenaar call assert_equal('-3.0', string(round(-2.9))) 22162473611SBram Moolenaar call assert_equal('nan', string(round(0.0/0.0))) 22262473611SBram Moolenaar call assert_equal('inf', string(round(1.0/0.0))) 22362473611SBram Moolenaar call assert_equal('-inf', string(round(-1.0/0.0))) 224453b576eSBram Moolenaarendfunc 225453b576eSBram Moolenaar 226453b576eSBram Moolenaarfunc Test_trunc() 22762473611SBram Moolenaar call assert_equal('2.0', string(trunc(2.1))) 22862473611SBram Moolenaar call assert_equal('2.0', string(trunc(2.5))) 22962473611SBram Moolenaar call assert_equal('2.0', string(trunc(2.9))) 23062473611SBram Moolenaar call assert_equal('-2.0', string(trunc(-2.1))) 23162473611SBram Moolenaar call assert_equal('-2.0', string(trunc(-2.5))) 23262473611SBram Moolenaar call assert_equal('-2.0', string(trunc(-2.9))) 23362473611SBram Moolenaar call assert_equal('nan', string(trunc(0.0/0.0))) 23462473611SBram Moolenaar call assert_equal('inf', string(trunc(1.0/0.0))) 23562473611SBram Moolenaar call assert_equal('-inf', string(trunc(-1.0/0.0))) 236453b576eSBram Moolenaarendfunc 237453b576eSBram Moolenaar 238453b576eSBram Moolenaarfunc Test_isnan() 23962473611SBram Moolenaar call assert_equal(0, isnan(1.0)) 24062473611SBram Moolenaar call assert_equal(1, isnan(0.0/0.0)) 24162473611SBram Moolenaar call assert_equal(0, isnan(1.0/0.0)) 24262473611SBram Moolenaar call assert_equal(0, isnan('a')) 24362473611SBram Moolenaar call assert_equal(0, isnan([])) 244453b576eSBram Moolenaarendfunc 245