1*8a7d6542SBram Moolenaar" Tests for Vim9 script expressions 2*8a7d6542SBram Moolenaar 3*8a7d6542SBram Moolenaarsource check.vim 4*8a7d6542SBram Moolenaar 5*8a7d6542SBram Moolenaar" Check that "line" inside ":def" results in an "error" message. 6*8a7d6542SBram Moolenaarfunc CheckDefFailure(line, error) 7*8a7d6542SBram Moolenaar call writefile(['def! Func()', a:line, 'enddef'], 'Xdef') 8*8a7d6542SBram Moolenaar call assert_fails('so Xdef', a:error, a:line) 9*8a7d6542SBram Moolenaar call delete('Xdef') 10*8a7d6542SBram Moolenaarendfunc 11*8a7d6542SBram Moolenaar 12*8a7d6542SBram Moolenaarfunc CheckDefFailureList(lines, error) 13*8a7d6542SBram Moolenaar call writefile(['def! Func()'] + a:lines + ['enddef'], 'Xdef') 14*8a7d6542SBram Moolenaar call assert_fails('so Xdef', a:error, string(a:lines)) 15*8a7d6542SBram Moolenaar call delete('Xdef') 16*8a7d6542SBram Moolenaarendfunc 17*8a7d6542SBram Moolenaar 18*8a7d6542SBram Moolenaar" test cond ? expr : expr 19*8a7d6542SBram Moolenaardef Test_expr1() 20*8a7d6542SBram Moolenaar assert_equal('one', true ? 'one' : 'two') 21*8a7d6542SBram Moolenaar assert_equal('one', 1 ? 'one' : 'two') 22*8a7d6542SBram Moolenaar assert_equal('one', 0.1 ? 'one' : 'two') 23*8a7d6542SBram Moolenaar assert_equal('one', 'x' ? 'one' : 'two') 24*8a7d6542SBram Moolenaar" assert_equal('one', 0z1234 ? 'one' : 'two') 25*8a7d6542SBram Moolenaar assert_equal('one', [0] ? 'one' : 'two') 26*8a7d6542SBram Moolenaar" assert_equal('one', #{x: 0} ? 'one' : 'two') 27*8a7d6542SBram Moolenaar let var = 1 28*8a7d6542SBram Moolenaar assert_equal('one', var ? 'one' : 'two') 29*8a7d6542SBram Moolenaar 30*8a7d6542SBram Moolenaar assert_equal('two', false ? 'one' : 'two') 31*8a7d6542SBram Moolenaar assert_equal('two', 0 ? 'one' : 'two') 32*8a7d6542SBram Moolenaar assert_equal('two', 0.0 ? 'one' : 'two') 33*8a7d6542SBram Moolenaar assert_equal('two', '' ? 'one' : 'two') 34*8a7d6542SBram Moolenaar" assert_equal('one', 0z ? 'one' : 'two') 35*8a7d6542SBram Moolenaar assert_equal('two', [] ? 'one' : 'two') 36*8a7d6542SBram Moolenaar" assert_equal('two', {} ? 'one' : 'two') 37*8a7d6542SBram Moolenaar var = 0 38*8a7d6542SBram Moolenaar assert_equal('two', var ? 'one' : 'two') 39*8a7d6542SBram Moolenaarenddef 40*8a7d6542SBram Moolenaar 41*8a7d6542SBram Moolenaarfunc Test_expr1_fails() 42*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1 ? 'one'", "Missing ':' after '?'") 43*8a7d6542SBram Moolenaar 44*8a7d6542SBram Moolenaar let msg = "white space required before and after '?'" 45*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1? 'one' : 'two'", msg) 46*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1 ?'one' : 'two'", msg) 47*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1?'one' : 'two'", msg) 48*8a7d6542SBram Moolenaar 49*8a7d6542SBram Moolenaar let msg = "white space required before and after ':'" 50*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1 ? 'one': 'two'", msg) 51*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1 ? 'one' :'two'", msg) 52*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1 ? 'one':'two'", msg) 53*8a7d6542SBram Moolenaarendfunc 54*8a7d6542SBram Moolenaar 55*8a7d6542SBram Moolenaar" TODO: define inside test function 56*8a7d6542SBram Moolenaardef Record(val: any): any 57*8a7d6542SBram Moolenaar g:vals->add(val) 58*8a7d6542SBram Moolenaar return val 59*8a7d6542SBram Moolenaarenddef 60*8a7d6542SBram Moolenaar 61*8a7d6542SBram Moolenaar" test || 62*8a7d6542SBram Moolenaardef Test_expr2() 63*8a7d6542SBram Moolenaar assert_equal(2, 2 || 0) 64*8a7d6542SBram Moolenaar assert_equal(7, 0 || 0 || 7) 65*8a7d6542SBram Moolenaar assert_equal(0, 0 || 0) 66*8a7d6542SBram Moolenaar assert_equal('', 0 || '') 67*8a7d6542SBram Moolenaar 68*8a7d6542SBram Moolenaar g:vals = [] 69*8a7d6542SBram Moolenaar assert_equal(3, Record(3) || Record(1)) 70*8a7d6542SBram Moolenaar assert_equal([3], g:vals) 71*8a7d6542SBram Moolenaar 72*8a7d6542SBram Moolenaar g:vals = [] 73*8a7d6542SBram Moolenaar assert_equal(5, Record(0) || Record(5)) 74*8a7d6542SBram Moolenaar assert_equal([0, 5], g:vals) 75*8a7d6542SBram Moolenaar 76*8a7d6542SBram Moolenaar g:vals = [] 77*8a7d6542SBram Moolenaar assert_equal(4, Record(0) || Record(4) || Record(0)) 78*8a7d6542SBram Moolenaar assert_equal([0, 4], g:vals) 79*8a7d6542SBram Moolenaar 80*8a7d6542SBram Moolenaar g:vals = [] 81*8a7d6542SBram Moolenaar assert_equal(0, Record([]) || Record('') || Record(0)) 82*8a7d6542SBram Moolenaar assert_equal([[], '', 0], g:vals) 83*8a7d6542SBram Moolenaarenddef 84*8a7d6542SBram Moolenaar 85*8a7d6542SBram Moolenaarfunc Test_expr2_fails() 86*8a7d6542SBram Moolenaar let msg = "white space required before and after '||'" 87*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1||2", msg) 88*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1 ||2", msg) 89*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1|| 2", msg) 90*8a7d6542SBram Moolenaarendfunc 91*8a7d6542SBram Moolenaar 92*8a7d6542SBram Moolenaar" test && 93*8a7d6542SBram Moolenaardef Test_expr3() 94*8a7d6542SBram Moolenaar assert_equal(0, 2 && 0) 95*8a7d6542SBram Moolenaar assert_equal(0, 0 && 0 && 7) 96*8a7d6542SBram Moolenaar assert_equal(7, 2 && 3 && 7) 97*8a7d6542SBram Moolenaar assert_equal(0, 0 && 0) 98*8a7d6542SBram Moolenaar assert_equal(0, 0 && '') 99*8a7d6542SBram Moolenaar assert_equal('', 8 && '') 100*8a7d6542SBram Moolenaar 101*8a7d6542SBram Moolenaar g:vals = [] 102*8a7d6542SBram Moolenaar assert_equal(1, Record(3) && Record(1)) 103*8a7d6542SBram Moolenaar assert_equal([3, 1], g:vals) 104*8a7d6542SBram Moolenaar 105*8a7d6542SBram Moolenaar g:vals = [] 106*8a7d6542SBram Moolenaar assert_equal(0, Record(0) && Record(5)) 107*8a7d6542SBram Moolenaar assert_equal([0], g:vals) 108*8a7d6542SBram Moolenaar 109*8a7d6542SBram Moolenaar g:vals = [] 110*8a7d6542SBram Moolenaar assert_equal(0, Record(0) && Record(4) && Record(0)) 111*8a7d6542SBram Moolenaar assert_equal([0], g:vals) 112*8a7d6542SBram Moolenaar 113*8a7d6542SBram Moolenaar g:vals = [] 114*8a7d6542SBram Moolenaar assert_equal(0, Record(8) && Record(4) && Record(0)) 115*8a7d6542SBram Moolenaar assert_equal([8, 4, 0], g:vals) 116*8a7d6542SBram Moolenaar 117*8a7d6542SBram Moolenaar g:vals = [] 118*8a7d6542SBram Moolenaar assert_equal(0, Record([1]) && Record('z') && Record(0)) 119*8a7d6542SBram Moolenaar assert_equal([[1], 'z', 0], g:vals) 120*8a7d6542SBram Moolenaarenddef 121*8a7d6542SBram Moolenaar 122*8a7d6542SBram Moolenaarfunc Test_expr3_fails() 123*8a7d6542SBram Moolenaar let msg = "white space required before and after '&&'" 124*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1&&2", msg) 125*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1 &&2", msg) 126*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1&& 2", msg) 127*8a7d6542SBram Moolenaarendfunc 128*8a7d6542SBram Moolenaar 129*8a7d6542SBram Moolenaarlet atrue = v:true 130*8a7d6542SBram Moolenaarlet afalse = v:false 131*8a7d6542SBram Moolenaarlet anone = v:none 132*8a7d6542SBram Moolenaarlet anull = v:null 133*8a7d6542SBram Moolenaarlet anint = 10 134*8a7d6542SBram Moolenaarlet alsoint = 4 135*8a7d6542SBram Moolenaarif has('float') 136*8a7d6542SBram Moolenaar let afloat = 0.1 137*8a7d6542SBram Moolenaarendif 138*8a7d6542SBram Moolenaarlet astring = 'asdf' 139*8a7d6542SBram Moolenaarlet ablob = 0z01ab 140*8a7d6542SBram Moolenaarlet alist = [2, 3, 4] 141*8a7d6542SBram Moolenaarlet adict = #{aaa: 2, bbb: 8} 142*8a7d6542SBram Moolenaar 143*8a7d6542SBram Moolenaar" test == comperator 144*8a7d6542SBram Moolenaardef Test_expr4_equal() 145*8a7d6542SBram Moolenaar assert_equal(true, true == true) 146*8a7d6542SBram Moolenaar assert_equal(false, true == false) 147*8a7d6542SBram Moolenaar assert_equal(true, true == g:atrue) 148*8a7d6542SBram Moolenaar assert_equal(false, g:atrue == false) 149*8a7d6542SBram Moolenaar 150*8a7d6542SBram Moolenaar assert_equal(true, v:none == v:none) 151*8a7d6542SBram Moolenaar assert_equal(false, v:none == v:null) 152*8a7d6542SBram Moolenaar assert_equal(true, g:anone == v:none) 153*8a7d6542SBram Moolenaar assert_equal(false, v:none == g:anull) 154*8a7d6542SBram Moolenaar 155*8a7d6542SBram Moolenaar assert_equal(false, 2 == 0) 156*8a7d6542SBram Moolenaar assert_equal(true, 61 == 61) 157*8a7d6542SBram Moolenaar assert_equal(true, g:anint == 10) 158*8a7d6542SBram Moolenaar assert_equal(false, 61 == g:anint) 159*8a7d6542SBram Moolenaar 160*8a7d6542SBram Moolenaar if has('float') 161*8a7d6542SBram Moolenaar assert_equal(true, 0.3 == 0.3) 162*8a7d6542SBram Moolenaar assert_equal(false, 0.4 == 0.3) 163*8a7d6542SBram Moolenaar assert_equal(true, 0.1 == g:afloat) 164*8a7d6542SBram Moolenaar assert_equal(false, g:afloat == 0.3) 165*8a7d6542SBram Moolenaar 166*8a7d6542SBram Moolenaar assert_equal(true, 3.0 == 3) 167*8a7d6542SBram Moolenaar assert_equal(true, 3 == 3.0) 168*8a7d6542SBram Moolenaar assert_equal(false, 3.1 == 3) 169*8a7d6542SBram Moolenaar assert_equal(false, 3 == 3.1) 170*8a7d6542SBram Moolenaar endif 171*8a7d6542SBram Moolenaar 172*8a7d6542SBram Moolenaar assert_equal(true, 'abc' == 'abc') 173*8a7d6542SBram Moolenaar assert_equal(false, 'xyz' == 'abc') 174*8a7d6542SBram Moolenaar assert_equal(true, g:astring == 'asdf') 175*8a7d6542SBram Moolenaar assert_equal(false, 'xyz' == g:astring) 176*8a7d6542SBram Moolenaar 177*8a7d6542SBram Moolenaar assert_equal(false, 'abc' == 'ABC') 178*8a7d6542SBram Moolenaar set ignorecase 179*8a7d6542SBram Moolenaar assert_equal(false, 'abc' == 'ABC') 180*8a7d6542SBram Moolenaar set noignorecase 181*8a7d6542SBram Moolenaar 182*8a7d6542SBram Moolenaar assert_equal(true, 0z3f == 0z3f) 183*8a7d6542SBram Moolenaar assert_equal(false, 0z3f == 0z4f) 184*8a7d6542SBram Moolenaar assert_equal(true, g:ablob == 0z01ab) 185*8a7d6542SBram Moolenaar assert_equal(false, 0z3f == g:ablob) 186*8a7d6542SBram Moolenaar 187*8a7d6542SBram Moolenaar assert_equal(true, [1, 2, 3] == [1, 2, 3]) 188*8a7d6542SBram Moolenaar assert_equal(false, [1, 2, 3] == [2, 3, 1]) 189*8a7d6542SBram Moolenaar assert_equal(true, [2, 3, 4] == g:alist) 190*8a7d6542SBram Moolenaar assert_equal(false, g:alist == [2, 3, 1]) 191*8a7d6542SBram Moolenaar assert_equal(false, [1, 2, 3] == []) 192*8a7d6542SBram Moolenaar assert_equal(false, [1, 2, 3] == ['1', '2', '3']) 193*8a7d6542SBram Moolenaar 194*8a7d6542SBram Moolenaar assert_equal(true, #{one: 1, two: 2} == #{one: 1, two: 2}) 195*8a7d6542SBram Moolenaar assert_equal(false, #{one: 1, two: 2} == #{one: 2, two: 2}) 196*8a7d6542SBram Moolenaar assert_equal(false, #{one: 1, two: 2} == #{two: 2}) 197*8a7d6542SBram Moolenaar assert_equal(false, #{one: 1, two: 2} == #{}) 198*8a7d6542SBram Moolenaar assert_equal(true, g:adict == #{bbb: 8, aaa: 2}) 199*8a7d6542SBram Moolenaar assert_equal(false, #{ccc: 9, aaa: 2} == g:adict) 200*8a7d6542SBram Moolenaar 201*8a7d6542SBram Moolenaar assert_equal(true, function('Test_expr4_equal') == function('Test_expr4_equal')) 202*8a7d6542SBram Moolenaar assert_equal(false, function('Test_expr4_equal') == function('Test_expr4_is')) 203*8a7d6542SBram Moolenaar 204*8a7d6542SBram Moolenaar assert_equal(true, function('Test_expr4_equal', [123]) == function('Test_expr4_equal', [123])) 205*8a7d6542SBram Moolenaar assert_equal(false, function('Test_expr4_equal', [123]) == function('Test_expr4_is', [123])) 206*8a7d6542SBram Moolenaar assert_equal(false, function('Test_expr4_equal', [123]) == function('Test_expr4_equal', [999])) 207*8a7d6542SBram Moolenaarenddef 208*8a7d6542SBram Moolenaar 209*8a7d6542SBram Moolenaar" test != comperator 210*8a7d6542SBram Moolenaardef Test_expr4_notequal() 211*8a7d6542SBram Moolenaar assert_equal(false, true != true) 212*8a7d6542SBram Moolenaar assert_equal(true, true != false) 213*8a7d6542SBram Moolenaar assert_equal(false, true != g:atrue) 214*8a7d6542SBram Moolenaar assert_equal(true, g:atrue != false) 215*8a7d6542SBram Moolenaar 216*8a7d6542SBram Moolenaar assert_equal(false, v:none != v:none) 217*8a7d6542SBram Moolenaar assert_equal(true, v:none != v:null) 218*8a7d6542SBram Moolenaar assert_equal(false, g:anone != v:none) 219*8a7d6542SBram Moolenaar assert_equal(true, v:none != g:anull) 220*8a7d6542SBram Moolenaar 221*8a7d6542SBram Moolenaar assert_equal(true, 2 != 0) 222*8a7d6542SBram Moolenaar assert_equal(false, 55 != 55) 223*8a7d6542SBram Moolenaar assert_equal(false, g:anint != 10) 224*8a7d6542SBram Moolenaar assert_equal(true, 61 != g:anint) 225*8a7d6542SBram Moolenaar 226*8a7d6542SBram Moolenaar if has('float') 227*8a7d6542SBram Moolenaar assert_equal(false, 0.3 != 0.3) 228*8a7d6542SBram Moolenaar assert_equal(true, 0.4 != 0.3) 229*8a7d6542SBram Moolenaar assert_equal(false, 0.1 != g:afloat) 230*8a7d6542SBram Moolenaar assert_equal(true, g:afloat != 0.3) 231*8a7d6542SBram Moolenaar 232*8a7d6542SBram Moolenaar assert_equal(false, 3.0 != 3) 233*8a7d6542SBram Moolenaar assert_equal(false, 3 != 3.0) 234*8a7d6542SBram Moolenaar assert_equal(true, 3.1 != 3) 235*8a7d6542SBram Moolenaar assert_equal(true, 3 != 3.1) 236*8a7d6542SBram Moolenaar endif 237*8a7d6542SBram Moolenaar 238*8a7d6542SBram Moolenaar assert_equal(false, 'abc' != 'abc') 239*8a7d6542SBram Moolenaar assert_equal(true, 'xyz' != 'abc') 240*8a7d6542SBram Moolenaar assert_equal(false, g:astring != 'asdf') 241*8a7d6542SBram Moolenaar assert_equal(true, 'xyz' != g:astring) 242*8a7d6542SBram Moolenaar 243*8a7d6542SBram Moolenaar assert_equal(true, 'abc' != 'ABC') 244*8a7d6542SBram Moolenaar set ignorecase 245*8a7d6542SBram Moolenaar assert_equal(true, 'abc' != 'ABC') 246*8a7d6542SBram Moolenaar set noignorecase 247*8a7d6542SBram Moolenaar 248*8a7d6542SBram Moolenaar assert_equal(false, 0z3f != 0z3f) 249*8a7d6542SBram Moolenaar assert_equal(true, 0z3f != 0z4f) 250*8a7d6542SBram Moolenaar assert_equal(false, g:ablob != 0z01ab) 251*8a7d6542SBram Moolenaar assert_equal(true, 0z3f != g:ablob) 252*8a7d6542SBram Moolenaar 253*8a7d6542SBram Moolenaar assert_equal(false, [1, 2, 3] != [1, 2, 3]) 254*8a7d6542SBram Moolenaar assert_equal(true, [1, 2, 3] != [2, 3, 1]) 255*8a7d6542SBram Moolenaar assert_equal(false, [2, 3, 4] != g:alist) 256*8a7d6542SBram Moolenaar assert_equal(true, g:alist != [2, 3, 1]) 257*8a7d6542SBram Moolenaar assert_equal(true, [1, 2, 3] != []) 258*8a7d6542SBram Moolenaar assert_equal(true, [1, 2, 3] != ['1', '2', '3']) 259*8a7d6542SBram Moolenaar 260*8a7d6542SBram Moolenaar assert_equal(false, #{one: 1, two: 2} != #{one: 1, two: 2}) 261*8a7d6542SBram Moolenaar assert_equal(true, #{one: 1, two: 2} != #{one: 2, two: 2}) 262*8a7d6542SBram Moolenaar assert_equal(true, #{one: 1, two: 2} != #{two: 2}) 263*8a7d6542SBram Moolenaar assert_equal(true, #{one: 1, two: 2} != #{}) 264*8a7d6542SBram Moolenaar assert_equal(false, g:adict != #{bbb: 8, aaa: 2}) 265*8a7d6542SBram Moolenaar assert_equal(true, #{ccc: 9, aaa: 2} != g:adict) 266*8a7d6542SBram Moolenaar 267*8a7d6542SBram Moolenaar assert_equal(false, function('Test_expr4_equal') != function('Test_expr4_equal')) 268*8a7d6542SBram Moolenaar assert_equal(true, function('Test_expr4_equal') != function('Test_expr4_is')) 269*8a7d6542SBram Moolenaar 270*8a7d6542SBram Moolenaar assert_equal(false, function('Test_expr4_equal', [123]) != function('Test_expr4_equal', [123])) 271*8a7d6542SBram Moolenaar assert_equal(true, function('Test_expr4_equal', [123]) != function('Test_expr4_is', [123])) 272*8a7d6542SBram Moolenaar assert_equal(true, function('Test_expr4_equal', [123]) != function('Test_expr4_equal', [999])) 273*8a7d6542SBram Moolenaarenddef 274*8a7d6542SBram Moolenaar 275*8a7d6542SBram Moolenaar" test > comperator 276*8a7d6542SBram Moolenaardef Test_expr4_greater() 277*8a7d6542SBram Moolenaar assert_equal(true, 2 > 0) 278*8a7d6542SBram Moolenaar assert_equal(true, 2 > 1) 279*8a7d6542SBram Moolenaar assert_equal(false, 2 > 2) 280*8a7d6542SBram Moolenaar assert_equal(false, 2 > 3) 281*8a7d6542SBram Moolenaarenddef 282*8a7d6542SBram Moolenaar 283*8a7d6542SBram Moolenaar" test >= comperator 284*8a7d6542SBram Moolenaardef Test_expr4_greaterequal() 285*8a7d6542SBram Moolenaar assert_equal(true, 2 >= 0) 286*8a7d6542SBram Moolenaar assert_equal(true, 2 >= 2) 287*8a7d6542SBram Moolenaar assert_equal(false, 2 >= 3) 288*8a7d6542SBram Moolenaarenddef 289*8a7d6542SBram Moolenaar 290*8a7d6542SBram Moolenaar" test < comperator 291*8a7d6542SBram Moolenaardef Test_expr4_smaller() 292*8a7d6542SBram Moolenaar assert_equal(false, 2 < 0) 293*8a7d6542SBram Moolenaar assert_equal(false, 2 < 2) 294*8a7d6542SBram Moolenaar assert_equal(true, 2 < 3) 295*8a7d6542SBram Moolenaarenddef 296*8a7d6542SBram Moolenaar 297*8a7d6542SBram Moolenaar" test <= comperator 298*8a7d6542SBram Moolenaardef Test_expr4_smallerequal() 299*8a7d6542SBram Moolenaar assert_equal(false, 2 <= 0) 300*8a7d6542SBram Moolenaar assert_equal(false, 2 <= 1) 301*8a7d6542SBram Moolenaar assert_equal(true, 2 <= 2) 302*8a7d6542SBram Moolenaar assert_equal(true, 2 <= 3) 303*8a7d6542SBram Moolenaarenddef 304*8a7d6542SBram Moolenaar 305*8a7d6542SBram Moolenaar" test =~ comperator 306*8a7d6542SBram Moolenaardef Test_expr4_match() 307*8a7d6542SBram Moolenaar assert_equal(false, '2' =~ '0') 308*8a7d6542SBram Moolenaar assert_equal(true, '2' =~ '[0-9]') 309*8a7d6542SBram Moolenaarenddef 310*8a7d6542SBram Moolenaar 311*8a7d6542SBram Moolenaar" test !~ comperator 312*8a7d6542SBram Moolenaardef Test_expr4_nomatch() 313*8a7d6542SBram Moolenaar assert_equal(true, '2' !~ '0') 314*8a7d6542SBram Moolenaar assert_equal(false, '2' !~ '[0-9]') 315*8a7d6542SBram Moolenaarenddef 316*8a7d6542SBram Moolenaar 317*8a7d6542SBram Moolenaar" test is comperator 318*8a7d6542SBram Moolenaardef Test_expr4_is() 319*8a7d6542SBram Moolenaar let mylist = [2] 320*8a7d6542SBram Moolenaar assert_equal(false, mylist is [2]) 321*8a7d6542SBram Moolenaar let other = mylist 322*8a7d6542SBram Moolenaar assert_equal(true, mylist is other) 323*8a7d6542SBram Moolenaarenddef 324*8a7d6542SBram Moolenaar 325*8a7d6542SBram Moolenaar" test isnot comperator 326*8a7d6542SBram Moolenaardef Test_expr4_isnot() 327*8a7d6542SBram Moolenaar let mylist = [2] 328*8a7d6542SBram Moolenaar assert_equal(true, '2' isnot '0') 329*8a7d6542SBram Moolenaar assert_equal(true, mylist isnot [2]) 330*8a7d6542SBram Moolenaar let other = mylist 331*8a7d6542SBram Moolenaar assert_equal(false, mylist isnot other) 332*8a7d6542SBram Moolenaarenddef 333*8a7d6542SBram Moolenaar 334*8a7d6542SBram Moolenaardef RetVoid() 335*8a7d6542SBram Moolenaar let x = 1 336*8a7d6542SBram Moolenaarenddef 337*8a7d6542SBram Moolenaar 338*8a7d6542SBram Moolenaarfunc Test_expr4_fails() 339*8a7d6542SBram Moolenaar let msg = "white space required before and after '>'" 340*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1>2", msg) 341*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1 >2", msg) 342*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1> 2", msg) 343*8a7d6542SBram Moolenaar 344*8a7d6542SBram Moolenaar let msg = "white space required before and after '=='" 345*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1==2", msg) 346*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1 ==2", msg) 347*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1== 2", msg) 348*8a7d6542SBram Moolenaar 349*8a7d6542SBram Moolenaar let msg = "white space required before and after 'is'" 350*8a7d6542SBram Moolenaar call CheckDefFailure("let x = '1'is'2'", msg) 351*8a7d6542SBram Moolenaar call CheckDefFailure("let x = '1' is'2'", msg) 352*8a7d6542SBram Moolenaar call CheckDefFailure("let x = '1'is '2'", msg) 353*8a7d6542SBram Moolenaar 354*8a7d6542SBram Moolenaar let msg = "white space required before and after 'isnot'" 355*8a7d6542SBram Moolenaar call CheckDefFailure("let x = '1'isnot'2'", msg) 356*8a7d6542SBram Moolenaar call CheckDefFailure("let x = '1' isnot'2'", msg) 357*8a7d6542SBram Moolenaar call CheckDefFailure("let x = '1'isnot '2'", msg) 358*8a7d6542SBram Moolenaar 359*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1 is# 2", 'E15:') 360*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1 is? 2", 'E15:') 361*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1 isnot# 2", 'E15:') 362*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1 isnot? 2", 'E15:') 363*8a7d6542SBram Moolenaar 364*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1 == '2'", 'Cannot compare number with string') 365*8a7d6542SBram Moolenaar call CheckDefFailure("let x = '1' == 2", 'Cannot compare string with number') 366*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1 == RetVoid()", 'Cannot use void value') 367*8a7d6542SBram Moolenaar call CheckDefFailure("let x = RetVoid() == 1", 'Cannot compare void with number') 368*8a7d6542SBram Moolenaar 369*8a7d6542SBram Moolenaar call CheckDefFailure("let x = true > false", 'Cannot compare bool with bool') 370*8a7d6542SBram Moolenaar call CheckDefFailure("let x = true >= false", 'Cannot compare bool with bool') 371*8a7d6542SBram Moolenaar call CheckDefFailure("let x = true < false", 'Cannot compare bool with bool') 372*8a7d6542SBram Moolenaar call CheckDefFailure("let x = true <= false", 'Cannot compare bool with bool') 373*8a7d6542SBram Moolenaar call CheckDefFailure("let x = true =~ false", 'Cannot compare bool with bool') 374*8a7d6542SBram Moolenaar call CheckDefFailure("let x = true !~ false", 'Cannot compare bool with bool') 375*8a7d6542SBram Moolenaar call CheckDefFailure("let x = true is false", 'Cannot use "is" with bool') 376*8a7d6542SBram Moolenaar call CheckDefFailure("let x = true isnot false", 'Cannot use "isnot" with bool') 377*8a7d6542SBram Moolenaar 378*8a7d6542SBram Moolenaar call CheckDefFailure("let x = v:none is v:null", 'Cannot use "is" with special') 379*8a7d6542SBram Moolenaar call CheckDefFailure("let x = v:none isnot v:null", 'Cannot use "isnot" with special') 380*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 123 is 123", 'Cannot use "is" with number') 381*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 123 isnot 123", 'Cannot use "isnot" with number') 382*8a7d6542SBram Moolenaar if has('float') 383*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1.3 is 1.3", 'Cannot use "is" with float') 384*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1.3 isnot 1.3", 'Cannot use "isnot" with float') 385*8a7d6542SBram Moolenaar endif 386*8a7d6542SBram Moolenaar 387*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 0za1 > 0z34", 'Cannot compare blob with blob') 388*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 0za1 >= 0z34", 'Cannot compare blob with blob') 389*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 0za1 < 0z34", 'Cannot compare blob with blob') 390*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 0za1 <= 0z34", 'Cannot compare blob with blob') 391*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 0za1 =~ 0z34", 'Cannot compare blob with blob') 392*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 0za1 !~ 0z34", 'Cannot compare blob with blob') 393*8a7d6542SBram Moolenaar 394*8a7d6542SBram Moolenaar call CheckDefFailure("let x = [13] > [88]", 'Cannot compare list with list') 395*8a7d6542SBram Moolenaar call CheckDefFailure("let x = [13] >= [88]", 'Cannot compare list with list') 396*8a7d6542SBram Moolenaar call CheckDefFailure("let x = [13] < [88]", 'Cannot compare list with list') 397*8a7d6542SBram Moolenaar call CheckDefFailure("let x = [13] <= [88]", 'Cannot compare list with list') 398*8a7d6542SBram Moolenaar call CheckDefFailure("let x = [13] =~ [88]", 'Cannot compare list with list') 399*8a7d6542SBram Moolenaar call CheckDefFailure("let x = [13] !~ [88]", 'Cannot compare list with list') 400*8a7d6542SBram Moolenaarendfunc 401*8a7d6542SBram Moolenaar 402*8a7d6542SBram Moolenaar" test addition, subtraction, concatenation 403*8a7d6542SBram Moolenaardef Test_expr5() 404*8a7d6542SBram Moolenaar assert_equal(66, 60 + 6) 405*8a7d6542SBram Moolenaar assert_equal(70, 60 + g:anint) 406*8a7d6542SBram Moolenaar assert_equal(9, g:alsoint + 5) 407*8a7d6542SBram Moolenaar assert_equal(14, g:alsoint + g:anint) 408*8a7d6542SBram Moolenaar 409*8a7d6542SBram Moolenaar assert_equal(54, 60 - 6) 410*8a7d6542SBram Moolenaar assert_equal(50, 60 - g:anint) 411*8a7d6542SBram Moolenaar assert_equal(-1, g:alsoint - 5) 412*8a7d6542SBram Moolenaar assert_equal(-6, g:alsoint - g:anint) 413*8a7d6542SBram Moolenaar 414*8a7d6542SBram Moolenaar assert_equal('hello', 'hel' .. 'lo') 415*8a7d6542SBram Moolenaar assert_equal('hello 123', 'hello ' .. 123) 416*8a7d6542SBram Moolenaar assert_equal('123 hello', 123 .. ' hello') 417*8a7d6542SBram Moolenaar assert_equal('123456', 123 .. 456) 418*8a7d6542SBram Moolenaarenddef 419*8a7d6542SBram Moolenaar 420*8a7d6542SBram Moolenaardef Test_expr5_float() 421*8a7d6542SBram Moolenaar CheckFeature float 422*8a7d6542SBram Moolenaar assert_equal(66.0, 60.0 + 6.0) 423*8a7d6542SBram Moolenaar assert_equal(66.0, 60.0 + 6) 424*8a7d6542SBram Moolenaar assert_equal(66.0, 60 + 6.0) 425*8a7d6542SBram Moolenaar assert_equal(5.1, g:afloat + 5) 426*8a7d6542SBram Moolenaar assert_equal(8.1, 8 + g:afloat) 427*8a7d6542SBram Moolenaar assert_equal(10.1, g:anint + g:afloat) 428*8a7d6542SBram Moolenaar assert_equal(10.1, g:afloat + g:anint) 429*8a7d6542SBram Moolenaar 430*8a7d6542SBram Moolenaar assert_equal(54.0, 60.0 - 6.0) 431*8a7d6542SBram Moolenaar assert_equal(54.0, 60.0 - 6) 432*8a7d6542SBram Moolenaar assert_equal(54.0, 60 - 6.0) 433*8a7d6542SBram Moolenaar assert_equal(-4.9, g:afloat - 5) 434*8a7d6542SBram Moolenaar assert_equal(7.9, 8 - g:afloat) 435*8a7d6542SBram Moolenaar assert_equal(9.9, g:anint - g:afloat) 436*8a7d6542SBram Moolenaar assert_equal(-9.9, g:afloat - g:anint) 437*8a7d6542SBram Moolenaarenddef 438*8a7d6542SBram Moolenaar 439*8a7d6542SBram Moolenaarfunc Test_expr5_fails() 440*8a7d6542SBram Moolenaar let msg = "white space required before and after '+'" 441*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1+2", msg) 442*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1 +2", msg) 443*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1+ 2", msg) 444*8a7d6542SBram Moolenaar 445*8a7d6542SBram Moolenaar let msg = "white space required before and after '-'" 446*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1-2", msg) 447*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1 -2", msg) 448*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1- 2", msg) 449*8a7d6542SBram Moolenaar 450*8a7d6542SBram Moolenaar let msg = "white space required before and after '..'" 451*8a7d6542SBram Moolenaar call CheckDefFailure("let x = '1'..'2'", msg) 452*8a7d6542SBram Moolenaar call CheckDefFailure("let x = '1' ..'2'", msg) 453*8a7d6542SBram Moolenaar call CheckDefFailure("let x = '1'.. '2'", msg) 454*8a7d6542SBram Moolenaarendfunc 455*8a7d6542SBram Moolenaar 456*8a7d6542SBram Moolenaar" test multiply, divide, modulo 457*8a7d6542SBram Moolenaardef Test_expr6() 458*8a7d6542SBram Moolenaar assert_equal(36, 6 * 6) 459*8a7d6542SBram Moolenaar assert_equal(24, 6 * g:alsoint) 460*8a7d6542SBram Moolenaar assert_equal(24, g:alsoint * 6) 461*8a7d6542SBram Moolenaar assert_equal(40, g:anint * g:alsoint) 462*8a7d6542SBram Moolenaar 463*8a7d6542SBram Moolenaar assert_equal(10, 60 / 6) 464*8a7d6542SBram Moolenaar assert_equal(6, 60 / g:anint) 465*8a7d6542SBram Moolenaar assert_equal(1, g:anint / 6) 466*8a7d6542SBram Moolenaar assert_equal(2, g:anint / g:alsoint) 467*8a7d6542SBram Moolenaar 468*8a7d6542SBram Moolenaar assert_equal(5, 11 % 6) 469*8a7d6542SBram Moolenaar assert_equal(4, g:anint % 6) 470*8a7d6542SBram Moolenaar assert_equal(3, 13 % g:anint) 471*8a7d6542SBram Moolenaar assert_equal(2, g:anint % g:alsoint) 472*8a7d6542SBram Moolenaar 473*8a7d6542SBram Moolenaar assert_equal(4, 6 * 4 / 6) 474*8a7d6542SBram Moolenaarenddef 475*8a7d6542SBram Moolenaar 476*8a7d6542SBram Moolenaardef Test_expr6_float() 477*8a7d6542SBram Moolenaar CheckFeature float 478*8a7d6542SBram Moolenaar 479*8a7d6542SBram Moolenaar assert_equal(36.0, 6.0 * 6) 480*8a7d6542SBram Moolenaar assert_equal(36.0, 6 * 6.0) 481*8a7d6542SBram Moolenaar assert_equal(36.0, 6.0 * 6.0) 482*8a7d6542SBram Moolenaar assert_equal(1.0, g:afloat * g:anint) 483*8a7d6542SBram Moolenaar 484*8a7d6542SBram Moolenaar assert_equal(10.0, 60 / 6.0) 485*8a7d6542SBram Moolenaar assert_equal(10.0, 60.0 / 6) 486*8a7d6542SBram Moolenaar assert_equal(10.0, 60.0 / 6.0) 487*8a7d6542SBram Moolenaar assert_equal(0.01, g:afloat / g:anint) 488*8a7d6542SBram Moolenaar 489*8a7d6542SBram Moolenaar assert_equal(4.0, 6.0 * 4 / 6) 490*8a7d6542SBram Moolenaar assert_equal(4.0, 6 * 4.0 / 6) 491*8a7d6542SBram Moolenaar assert_equal(4.0, 6 * 4 / 6.0) 492*8a7d6542SBram Moolenaar assert_equal(4.0, 6.0 * 4.0 / 6) 493*8a7d6542SBram Moolenaar assert_equal(4.0, 6 * 4.0 / 6.0) 494*8a7d6542SBram Moolenaar assert_equal(4.0, 6.0 * 4 / 6.0) 495*8a7d6542SBram Moolenaar assert_equal(4.0, 6.0 * 4.0 / 6.0) 496*8a7d6542SBram Moolenaar 497*8a7d6542SBram Moolenaar assert_equal(4.0, 6.0 * 4.0 / 6.0) 498*8a7d6542SBram Moolenaarenddef 499*8a7d6542SBram Moolenaar 500*8a7d6542SBram Moolenaarfunc Test_expr6_fails() 501*8a7d6542SBram Moolenaar let msg = "white space required before and after '*'" 502*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1*2", msg) 503*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1 *2", msg) 504*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1* 2", msg) 505*8a7d6542SBram Moolenaar 506*8a7d6542SBram Moolenaar let msg = "white space required before and after '/'" 507*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1/2", msg) 508*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1 /2", msg) 509*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1/ 2", msg) 510*8a7d6542SBram Moolenaar 511*8a7d6542SBram Moolenaar let msg = "white space required before and after '%'" 512*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1%2", msg) 513*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1 %2", msg) 514*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1% 2", msg) 515*8a7d6542SBram Moolenaar 516*8a7d6542SBram Moolenaar call CheckDefFailure("let x = '1' * '2'", 'E1036:') 517*8a7d6542SBram Moolenaar call CheckDefFailure("let x = '1' / '2'", 'E1036:') 518*8a7d6542SBram Moolenaar call CheckDefFailure("let x = '1' % '2'", 'E1035:') 519*8a7d6542SBram Moolenaar 520*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 0z01 * 0z12", 'E1036:') 521*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 0z01 / 0z12", 'E1036:') 522*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 0z01 % 0z12", 'E1035:') 523*8a7d6542SBram Moolenaar 524*8a7d6542SBram Moolenaar call CheckDefFailure("let x = [1] * [2]", 'E1036:') 525*8a7d6542SBram Moolenaar call CheckDefFailure("let x = [1] / [2]", 'E1036:') 526*8a7d6542SBram Moolenaar call CheckDefFailure("let x = [1] % [2]", 'E1035:') 527*8a7d6542SBram Moolenaar 528*8a7d6542SBram Moolenaar call CheckDefFailure("let x = #{one: 1} * #{two: 2}", 'E1036:') 529*8a7d6542SBram Moolenaar call CheckDefFailure("let x = #{one: 1} / #{two: 2}", 'E1036:') 530*8a7d6542SBram Moolenaar call CheckDefFailure("let x = #{one: 1} % #{two: 2}", 'E1035:') 531*8a7d6542SBram Moolenaar 532*8a7d6542SBram Moolenaarendfunc 533*8a7d6542SBram Moolenaar 534*8a7d6542SBram Moolenaarfunc Test_expr6_float_fails() 535*8a7d6542SBram Moolenaar CheckFeature float 536*8a7d6542SBram Moolenaar call CheckDefFailure("let x = 1.0 % 2", 'E1035:') 537*8a7d6542SBram Moolenaarendfunc 538*8a7d6542SBram Moolenaar 539*8a7d6542SBram Moolenaar" define here to use old style parsing 540*8a7d6542SBram Moolenaarif has('float') 541*8a7d6542SBram Moolenaar let g:float_zero = 0.0 542*8a7d6542SBram Moolenaar let g:float_neg = -9.8 543*8a7d6542SBram Moolenaar let g:float_big = 9.9e99 544*8a7d6542SBram Moolenaarendif 545*8a7d6542SBram Moolenaarlet g:blob_empty = 0z 546*8a7d6542SBram Moolenaarlet g:blob_one = 0z01 547*8a7d6542SBram Moolenaarlet g:blob_long = 0z0102.0304 548*8a7d6542SBram Moolenaar 549*8a7d6542SBram Moolenaarlet g:string_empty = '' 550*8a7d6542SBram Moolenaarlet g:string_short = 'x' 551*8a7d6542SBram Moolenaarlet g:string_long = 'abcdefghijklm' 552*8a7d6542SBram Moolenaarlet g:string_special = "ab\ncd\ref\ekk" 553*8a7d6542SBram Moolenaar 554*8a7d6542SBram Moolenaarlet g:special_true = v:true 555*8a7d6542SBram Moolenaarlet g:special_false = v:false 556*8a7d6542SBram Moolenaarlet g:special_null = v:null 557*8a7d6542SBram Moolenaarlet g:special_none = v:none 558*8a7d6542SBram Moolenaar 559*8a7d6542SBram Moolenaarlet g:list_empty = [] 560*8a7d6542SBram Moolenaarlet g:list_mixed = [1, 'b', v:false] 561*8a7d6542SBram Moolenaar 562*8a7d6542SBram Moolenaarlet g:dict_empty = {} 563*8a7d6542SBram Moolenaarlet g:dict_one = #{one: 1} 564*8a7d6542SBram Moolenaar 565*8a7d6542SBram Moolenaarlet $TESTVAR = 'testvar' 566*8a7d6542SBram Moolenaar 567*8a7d6542SBram Moolenaarlet @a = 'register a' 568*8a7d6542SBram Moolenaar 569*8a7d6542SBram Moolenaar" test low level expression 570*8a7d6542SBram Moolenaardef Test_expr7_number() 571*8a7d6542SBram Moolenaar " number constant 572*8a7d6542SBram Moolenaar assert_equal(0, 0) 573*8a7d6542SBram Moolenaar assert_equal(654, 0654) 574*8a7d6542SBram Moolenaar 575*8a7d6542SBram Moolenaar assert_equal(6, 0x6) 576*8a7d6542SBram Moolenaar assert_equal(15, 0xf) 577*8a7d6542SBram Moolenaar assert_equal(255, 0xff) 578*8a7d6542SBram Moolenaarenddef 579*8a7d6542SBram Moolenaar 580*8a7d6542SBram Moolenaardef Test_expr7_float() 581*8a7d6542SBram Moolenaar " float constant 582*8a7d6542SBram Moolenaar if has('float') 583*8a7d6542SBram Moolenaar assert_equal(g:float_zero, .0) 584*8a7d6542SBram Moolenaar assert_equal(g:float_zero, 0.0) 585*8a7d6542SBram Moolenaar assert_equal(g:float_neg, -9.8) 586*8a7d6542SBram Moolenaar assert_equal(g:float_big, 9.9e99) 587*8a7d6542SBram Moolenaar endif 588*8a7d6542SBram Moolenaarenddef 589*8a7d6542SBram Moolenaar 590*8a7d6542SBram Moolenaardef Test_expr7_blob() 591*8a7d6542SBram Moolenaar " blob constant 592*8a7d6542SBram Moolenaar assert_equal(g:blob_empty, 0z) 593*8a7d6542SBram Moolenaar assert_equal(g:blob_one, 0z01) 594*8a7d6542SBram Moolenaar assert_equal(g:blob_long, 0z0102.0304) 595*8a7d6542SBram Moolenaarenddef 596*8a7d6542SBram Moolenaar 597*8a7d6542SBram Moolenaardef Test_expr7_string() 598*8a7d6542SBram Moolenaar " string constant 599*8a7d6542SBram Moolenaar assert_equal(g:string_empty, '') 600*8a7d6542SBram Moolenaar assert_equal(g:string_empty, "") 601*8a7d6542SBram Moolenaar assert_equal(g:string_short, 'x') 602*8a7d6542SBram Moolenaar assert_equal(g:string_short, "x") 603*8a7d6542SBram Moolenaar assert_equal(g:string_long, 'abcdefghijklm') 604*8a7d6542SBram Moolenaar assert_equal(g:string_long, "abcdefghijklm") 605*8a7d6542SBram Moolenaar assert_equal(g:string_special, "ab\ncd\ref\ekk") 606*8a7d6542SBram Moolenaarenddef 607*8a7d6542SBram Moolenaar 608*8a7d6542SBram Moolenaardef Test_expr7_special() 609*8a7d6542SBram Moolenaar " special constant 610*8a7d6542SBram Moolenaar assert_equal(g:special_true, true) 611*8a7d6542SBram Moolenaar assert_equal(g:special_false, false) 612*8a7d6542SBram Moolenaar assert_equal(g:special_null, v:null) 613*8a7d6542SBram Moolenaar assert_equal(g:special_none, v:none) 614*8a7d6542SBram Moolenaarenddef 615*8a7d6542SBram Moolenaar 616*8a7d6542SBram Moolenaardef Test_expr7_list() 617*8a7d6542SBram Moolenaar " list 618*8a7d6542SBram Moolenaar assert_equal(g:list_empty, []) 619*8a7d6542SBram Moolenaar assert_equal(g:list_empty, [ ]) 620*8a7d6542SBram Moolenaar assert_equal(g:list_mixed, [1, 'b', false]) 621*8a7d6542SBram Moolenaarenddef 622*8a7d6542SBram Moolenaar 623*8a7d6542SBram Moolenaardef Test_expr7_lambda() 624*8a7d6542SBram Moolenaar " lambda 625*8a7d6542SBram Moolenaar let La = { -> 'result'} 626*8a7d6542SBram Moolenaar assert_equal('result', La()) 627*8a7d6542SBram Moolenaar assert_equal([1, 3, 5], [1, 2, 3]->map({key, val -> key + val})) 628*8a7d6542SBram Moolenaarenddef 629*8a7d6542SBram Moolenaar 630*8a7d6542SBram Moolenaardef Test_expr7_dict() 631*8a7d6542SBram Moolenaar " dictionary 632*8a7d6542SBram Moolenaar assert_equal(g:dict_empty, {}) 633*8a7d6542SBram Moolenaar assert_equal(g:dict_empty, { }) 634*8a7d6542SBram Moolenaar assert_equal(g:dict_one, {'one': 1}) 635*8a7d6542SBram Moolenaar let key = 'one' 636*8a7d6542SBram Moolenaar let val = 1 637*8a7d6542SBram Moolenaar assert_equal(g:dict_one, {key: val}) 638*8a7d6542SBram Moolenaarenddef 639*8a7d6542SBram Moolenaar 640*8a7d6542SBram Moolenaardef Test_expr7_option() 641*8a7d6542SBram Moolenaar " option 642*8a7d6542SBram Moolenaar set ts=11 643*8a7d6542SBram Moolenaar assert_equal(11, &ts) 644*8a7d6542SBram Moolenaar set ts=8 645*8a7d6542SBram Moolenaar set grepprg=some\ text 646*8a7d6542SBram Moolenaar assert_equal('some text', &grepprg) 647*8a7d6542SBram Moolenaar set grepprg& 648*8a7d6542SBram Moolenaarenddef 649*8a7d6542SBram Moolenaar 650*8a7d6542SBram Moolenaardef Test_expr7_environment() 651*8a7d6542SBram Moolenaar " environment variable 652*8a7d6542SBram Moolenaar assert_equal('testvar', $TESTVAR) 653*8a7d6542SBram Moolenaar assert_equal('', $ASDF_ASD_XXX) 654*8a7d6542SBram Moolenaarenddef 655*8a7d6542SBram Moolenaar 656*8a7d6542SBram Moolenaardef Test_expr7_register() 657*8a7d6542SBram Moolenaar " register 658*8a7d6542SBram Moolenaar assert_equal('register a', @a) 659*8a7d6542SBram Moolenaarenddef 660*8a7d6542SBram Moolenaar 661*8a7d6542SBram Moolenaardef Test_expr7_parens() 662*8a7d6542SBram Moolenaar " (expr) 663*8a7d6542SBram Moolenaar assert_equal(4, (6 * 4) / 6) 664*8a7d6542SBram Moolenaar assert_equal(0, 6 * ( 4 / 6 )) 665*8a7d6542SBram Moolenaar 666*8a7d6542SBram Moolenaar assert_equal(6, +6) 667*8a7d6542SBram Moolenaar assert_equal(-6, -6) 668*8a7d6542SBram Moolenaar assert_equal(6, --6) 669*8a7d6542SBram Moolenaar assert_equal(6, -+-6) 670*8a7d6542SBram Moolenaar assert_equal(-6, ---6) 671*8a7d6542SBram Moolenaarenddef 672*8a7d6542SBram Moolenaar 673*8a7d6542SBram Moolenaardef Test_expr7_not() 674*8a7d6542SBram Moolenaar assert_equal(true, !'') 675*8a7d6542SBram Moolenaar assert_equal(true, ![]) 676*8a7d6542SBram Moolenaar assert_equal(false, !'asdf') 677*8a7d6542SBram Moolenaar assert_equal(false, ![2]) 678*8a7d6542SBram Moolenaar assert_equal(true, !!'asdf') 679*8a7d6542SBram Moolenaar assert_equal(true, !![2]) 680*8a7d6542SBram Moolenaarenddef 681*8a7d6542SBram Moolenaar 682*8a7d6542SBram Moolenaarfunc Test_expr7_fails() 683*8a7d6542SBram Moolenaar call CheckDefFailure("let x = (12", "E110:") 684*8a7d6542SBram Moolenaar 685*8a7d6542SBram Moolenaar call CheckDefFailure("let x = -'xx'", "E1030:") 686*8a7d6542SBram Moolenaar call CheckDefFailure("let x = +'xx'", "E1030:") 687*8a7d6542SBram Moolenaar 688*8a7d6542SBram Moolenaar call CheckDefFailure("let x = @", "E1002:") 689*8a7d6542SBram Moolenaar call CheckDefFailure("let x = @<", "E354:") 690*8a7d6542SBram Moolenaarendfunc 691*8a7d6542SBram Moolenaar 692*8a7d6542SBram Moolenaarlet g:Funcrefs = [function('add')] 693*8a7d6542SBram Moolenaar 694*8a7d6542SBram Moolenaarfunc CallMe(arg) 695*8a7d6542SBram Moolenaar return a:arg 696*8a7d6542SBram Moolenaarendfunc 697*8a7d6542SBram Moolenaar 698*8a7d6542SBram Moolenaardef Test_expr7_trailing() 699*8a7d6542SBram Moolenaar " user function call 700*8a7d6542SBram Moolenaar assert_equal(123, CallMe(123)) 701*8a7d6542SBram Moolenaar assert_equal('nothing', CallMe('nothing')) 702*8a7d6542SBram Moolenaar 703*8a7d6542SBram Moolenaar " partial call 704*8a7d6542SBram Moolenaar let Part = function('CallMe') 705*8a7d6542SBram Moolenaar assert_equal('yes', Part('yes')) 706*8a7d6542SBram Moolenaar 707*8a7d6542SBram Moolenaar " funcref call, using list index 708*8a7d6542SBram Moolenaar let l = [] 709*8a7d6542SBram Moolenaar g:Funcrefs[0](l, 2) 710*8a7d6542SBram Moolenaar assert_equal([2], l) 711*8a7d6542SBram Moolenaar 712*8a7d6542SBram Moolenaar " method call 713*8a7d6542SBram Moolenaar l = [2, 5, 6] 714*8a7d6542SBram Moolenaar l->map({k, v -> k + v}) 715*8a7d6542SBram Moolenaar assert_equal([2, 6, 8], l) 716*8a7d6542SBram Moolenaar 717*8a7d6542SBram Moolenaar " lambda method call 718*8a7d6542SBram Moolenaar l = [2, 5] 719*8a7d6542SBram Moolenaar l->{l -> add(l, 8)}() 720*8a7d6542SBram Moolenaar assert_equal([2, 5, 8], l) 721*8a7d6542SBram Moolenaar 722*8a7d6542SBram Moolenaar " dict member 723*8a7d6542SBram Moolenaar let d = #{key: 123} 724*8a7d6542SBram Moolenaar assert_equal(123, d.key) 725*8a7d6542SBram Moolenaarenddef 726*8a7d6542SBram Moolenaar 727*8a7d6542SBram Moolenaarfunc Test_expr7_trailing_fails() 728*8a7d6542SBram Moolenaar call CheckDefFailureList(['let l = [2]', 'l->{l -> add(l, 8)}'], 'E107') 729*8a7d6542SBram Moolenaarendfunc 730*8a7d6542SBram Moolenaar 731*8a7d6542SBram Moolenaarfunc Test_expr_fails() 732*8a7d6542SBram Moolenaar call CheckDefFailure("let x = '1'is2", 'E488:') 733*8a7d6542SBram Moolenaar call CheckDefFailure("let x = '1'isnot2", 'E488:') 734*8a7d6542SBram Moolenaarendfunc 735