diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-11-12 20:16:39 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-11-12 20:16:39 +0100 |
commit | 659bb2275e1c407709e2ac949044d6b256de5550 (patch) | |
tree | 2f029858b01281251ad9d65ff2e08574435485c7 | |
parent | 47c5ea44b975adca00eaacecee5c4108996178d9 (diff) |
patch 8.2.1980: Vim9: some tests are not done at the script levelv8.2.1980
Problem: Vim9: some tests are not done at the script level.
Solution: Use CheckDefAndScriptSuccess() in more places. Fix uncovered
problems.
-rw-r--r-- | src/eval.c | 10 | ||||
-rw-r--r-- | src/list.c | 2 | ||||
-rw-r--r-- | src/scriptfile.c | 3 | ||||
-rw-r--r-- | src/testdir/test_vim9_expr.vim | 1438 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 734 insertions, 721 deletions
diff --git a/src/eval.c b/src/eval.c index dc77153303..0365adc89f 100644 --- a/src/eval.c +++ b/src/eval.c @@ -3438,7 +3438,15 @@ eval7_leader( } #ifdef FEAT_FLOAT if (rettv->v_type == VAR_FLOAT) - f = !f; + { + if (in_vim9script()) + { + rettv->v_type = VAR_BOOL; + val = f == 0.0 ? VVAL_TRUE : VVAL_FALSE; + } + else + f = !f; + } else #endif { diff --git a/src/list.c b/src/list.c index b62c14164f..1a82a34077 100644 --- a/src/list.c +++ b/src/list.c @@ -1264,7 +1264,7 @@ eval_list(char_u **arg, typval_T *rettv, evalarg_T *evalarg, int do_error) had_comma = **arg == ','; if (had_comma) { - if (vim9script && !IS_WHITE_OR_NUL((*arg)[1])) + if (vim9script && !IS_WHITE_OR_NUL((*arg)[1]) && (*arg)[1] != ']') { semsg(_(e_white_space_required_after_str), ","); goto failret; diff --git a/src/scriptfile.c b/src/scriptfile.c index 68d1023f24..7e5ea4c63d 100644 --- a/src/scriptfile.c +++ b/src/scriptfile.c @@ -1332,7 +1332,10 @@ do_source( // set again. ht = &SCRIPT_VARS(sid); if (is_vim9) + { hashtab_free_contents(ht); + hash_init(ht); + } else { int todo = (int)ht->ht_used; diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim index 24d30e25a7..0752772211 100644 --- a/src/testdir/test_vim9_expr.vim +++ b/src/testdir/test_vim9_expr.vim @@ -13,52 +13,55 @@ enddef " test cond ? expr : expr def Test_expr1_trinary() - assert_equal('one', true ? 'one' : 'two') - assert_equal('one', 1 ? - 'one' : - 'two') - if has('float') - assert_equal('one', !!0.1 ? 'one' : 'two') - endif - assert_equal('one', !!'x' ? 'one' : 'two') - assert_equal('one', !!'x' - ? 'one' - : 'two') - assert_equal('one', !!0z1234 ? 'one' : 'two') - assert_equal('one', !![0] ? 'one' : 'two') - assert_equal('one', !!#{x: 0} ? 'one' : 'two') - var name = 1 - assert_equal('one', name ? 'one' : 'two') - - assert_equal('two', false ? 'one' : 'two') - assert_equal('two', 0 ? 'one' : 'two') - if has('float') - assert_equal('two', !!0.0 ? 'one' : 'two') - endif - assert_equal('two', !!'' ? 'one' : 'two') - assert_equal('two', !!0z ? 'one' : 'two') - assert_equal('two', !![] ? 'one' : 'two') - assert_equal('two', !!{} ? 'one' : 'two') - name = 0 - assert_equal('two', name ? 'one' : 'two') - - # with constant condition expression is not evaluated - assert_equal('one', 1 ? 'one' : xxx) - - var Some: func = function('len') - var Other: func = function('winnr') - var Res: func = g:atrue ? Some : Other - assert_equal(function('len'), Res) - - var RetOne: func(string): number = function('len') - var RetTwo: func(string): number = function('winnr') - var RetThat: func = g:atrue ? RetOne : RetTwo - assert_equal(function('len'), RetThat) + var lines =<< trim END + assert_equal('one', true ? 'one' : 'two') + assert_equal('one', 1 ? + 'one' : + 'two') + if has('float') + assert_equal('one', !!0.1 ? 'one' : 'two') + endif + assert_equal('one', !!'x' ? 'one' : 'two') + assert_equal('one', !!'x' + ? 'one' + : 'two') + assert_equal('one', !!0z1234 ? 'one' : 'two') + assert_equal('one', !![0] ? 'one' : 'two') + assert_equal('one', !!#{x: 0} ? 'one' : 'two') + var name = 1 + assert_equal('one', name ? 'one' : 'two') - var X = FuncOne - var Y = FuncTwo - var Z = g:cond ? FuncOne : FuncTwo - assert_equal(123, Z(3)) + assert_equal('two', false ? 'one' : 'two') + assert_equal('two', 0 ? 'one' : 'two') + if has('float') + assert_equal('two', !!0.0 ? 'one' : 'two') + endif + assert_equal('two', !!'' ? 'one' : 'two') + assert_equal('two', !!0z ? 'one' : 'two') + assert_equal('two', !![] ? 'one' : 'two') + assert_equal('two', !!{} ? 'one' : 'two') + name = 0 + assert_equal('two', name ? 'one' : 'two') + + # with constant condition expression is not evaluated + assert_equal('one', 1 ? 'one' : xxx) + + var Some: func = function('len') + var Other: func = function('winnr') + var Res: func = g:atrue ? Some : Other + assert_equal(function('len'), Res) + + var RetOne: func(string): number = function('len') + var RetTwo: func(string): number = function('winnr') + var RetThat: func = g:atrue ? RetOne : RetTwo + assert_equal(function('len'), RetThat) + + var X = FuncOne + var Y = FuncTwo + var Z = g:cond ? FuncOne : FuncTwo + assert_equal(123, Z(3)) + END + CheckDefAndScriptSuccess(lines) enddef def Test_expr1_trinary_vimscript() @@ -225,7 +228,6 @@ def Test_expr1_falsy() call CheckDefFailure(["var x = 1??'one' : 'two'"], msg, 1) enddef -" TODO: define inside test function def Record(val: any): any g:vals->add(val) return val @@ -233,32 +235,52 @@ enddef " test || def Test_expr2() - assert_equal(true, 1 || 0) - assert_equal(true, 0 || - 0 || - 1) - assert_equal(false, 0 || 0) - assert_equal(false, 0 - || 0) - assert_equal(false, 0 || false) - - g:vals = [] - assert_equal(true, Record(1) || Record(3)) - assert_equal([1], g:vals) - - g:vals = [] - assert_equal(true, Record(0) || Record(1)) - assert_equal([0, 1], g:vals) - - g:vals = [] - assert_equal(true, Record(0) - || Record(1) - || Record(0)) - assert_equal([0, 1], g:vals) - - g:vals = [] - assert_equal(false, Record(0) || Record(false) || Record(0)) - assert_equal([0, false, 0], g:vals) + var lines =<< trim END + assert_equal(true, 1 || 0) + assert_equal(true, 0 || + 0 || + 1) + assert_equal(true, 0 || + 0 || + !!7) + assert_equal(false, 0 || 0) + assert_equal(false, 0 + || 0) + assert_equal(false, 0 || false) + + g:vals = [] + assert_equal(true, Record(1) || Record(3)) + assert_equal([1], g:vals) + + g:vals = [] + assert_equal(true, Record(0) || Record(1)) + assert_equal([0, 1], g:vals) + + g:vals = [] + assert_equal(true, Record(0) || Record(true)) + assert_equal([0, true], g:vals) + + g:vals = [] + assert_equal(true, Record(0) + || Record(1) + || Record(0)) + assert_equal([0, 1], g:vals) + + g:vals = [] + assert_equal(true, Record(0) + || Record(true) + || Record(0)) + assert_equal([0, true], g:vals) + + g:vals = [] + assert_equal(true, Record(true) || Record(false)) + assert_equal([true], g:vals) + + g:vals = [] + assert_equal(false, Record(0) || Record(false) || Record(0)) + assert_equal([0, false, 0], g:vals) + END + CheckDefAndScriptSuccess(lines) enddef def Test_expr2_vimscript() @@ -316,37 +338,6 @@ def Test_expr2_vimscript() var name = v:true|| v:true END CheckScriptFailure(lines, 'E1004:', 2) - - # check evaluating to bool - lines =<< trim END - assert_equal(true, 1 || 0) - assert_equal(true, 0 || - 0 || - !!7) - assert_equal(false, 0 || 0) - assert_equal(false, 0 - || 0) - assert_equal(false, 0 || false) - - g:vals = [] - assert_equal(true, Record(true) || Record(false)) - assert_equal([true], g:vals) - - g:vals = [] - assert_equal(true, Record(0) || Record(true)) - assert_equal([0, true], g:vals) - - g:vals = [] - assert_equal(true, Record(0) - || Record(true) - || Record(0)) - assert_equal([0, true], g:vals) - - g:vals = [] - assert_equal(false, Record(0) || Record(false) || Record(0)) - assert_equal([0, false, 0], g:vals) - END - CheckDefAndScriptSuccess(lines) enddef def Test_expr2_fails() @@ -367,36 +358,43 @@ enddef " test && def Test_expr3() - assert_equal(false, 1 && 0) - assert_equal(false, 0 && - 0 && - 1) - assert_equal(true, 1 - && true - && 1) - assert_equal(false, 0 && 0) - assert_equal(false, 0 && false) - assert_equal(true, 1 && true) - - g:vals = [] - assert_equal(true, Record(true) && Record(1)) - assert_equal([true, 1], g:vals) - - g:vals = [] - assert_equal(false, Record(0) && Record(1)) - assert_equal([0], g:vals) - - g:vals = [] - assert_equal(false, Record(0) && Record(4) && Record(0)) - assert_equal([0], g:vals) - - g:vals = [] - assert_equal(false, Record(1) && Record(true) && Record(0)) - assert_equal([1, true, 0], g:vals) - - g:vals = [] - assert_equal(false, Record(1) && Record(true) && Record(0)) - assert_equal([1, true, 0], g:vals) + var lines =<< trim END + assert_equal(false, 1 && 0) + assert_equal(false, 0 && + 0 && + 1) + assert_equal(true, 1 + && true + && 1) + assert_equal(false, 0 && 0) + assert_equal(false, 0 && false) + assert_equal(true, 1 && true) + + g:vals = [] + assert_equal(true, Record(true) && Record(1)) + assert_equal([true, 1], g:vals) + + g:vals = [] + assert_equal(true, Record(1) && Record(true)) + assert_equal([1, true], g:vals) + + g:vals = [] + assert_equal(false, Record(0) && Record(1)) + assert_equal([0], g:vals) + + g:vals = [] + assert_equal(false, Record(0) && Record(1) && Record(0)) + assert_equal([0], g:vals) + + g:vals = [] + assert_equal(false, Record(0) && Record(4) && Record(0)) + assert_equal([0], g:vals) + + g:vals = [] + assert_equal(false, Record(1) && Record(true) && Record(0)) + assert_equal([1, true, 0], g:vals) + END + CheckDefAndScriptSuccess(lines) enddef def Test_expr3_vimscript() @@ -454,38 +452,6 @@ def Test_expr3_vimscript() var name = v:true&& v:true END CheckScriptFailure(lines, 'E1004:', 2) - - # check keeping the value - lines =<< trim END - vim9script - assert_equal(false, 1 && 0) - assert_equal(false, 0 && - 0 && - 1) - assert_equal(true, 1 - && true - && 1) - assert_equal(false, 0 && 0) - assert_equal(false, 0 && false) - assert_equal(false, 1 && 0) - - g:vals = [] - assert_equal(true, Record(1) && Record(true)) - assert_equal([1, true], g:vals) - - g:vals = [] - assert_equal(false, Record(0) && Record(1)) - assert_equal([0], g:vals) - - g:vals = [] - assert_equal(false, Record(0) && Record(1) && Record(0)) - assert_equal([0], g:vals) - - g:vals = [] - assert_equal(false, Record(1) && Record(true) && Record(0)) - assert_equal([1, true, 0], g:vals) - END - CheckScriptSuccess(lines) enddef func Test_expr3_fails() @@ -495,6 +461,8 @@ func Test_expr3_fails() call CheckDefFailure(["var x = 1&& 2"], msg, 1) call CheckDefFailure(["if 'yes' && 0", 'echo 0', 'endif'], 'E1012: Type mismatch; expected bool but got string', 1) + + call CheckDefExecFailure(['assert_equal(false, Record(1) && Record(4) && Record(0))'], 'E1023: Using a Number as a Bool: 4', 1) endfunc " global variables to use for tests with the "any" type @@ -515,307 +483,345 @@ let adict = #{aaa: 2, bbb: 8} " test == comperator def Test_expr4_equal() - var trueVar = true - var falseVar = false - assert_equal(true, true == true) - assert_equal(false, true == - false) - assert_equal(true, true - == trueVar) - assert_equal(false, true == falseVar) - assert_equal(true, true == g:atrue) - assert_equal(false, g:atrue == false) - - assert_equal(true, v:none == v:none) - assert_equal(false, v:none == v:null) - assert_equal(true, g:anone == v:none) - assert_equal(false, v:none == g:anull) - - var nr0 = 0 - var nr61 = 61 - assert_equal(false, 2 == 0) - assert_equal(false, 2 == nr0) - assert_equal(true, 61 == 61) - assert_equal(true, 61 == nr61) - assert_equal(true, g:anint == 10) - assert_equal(false, 61 == g:anint) - - if has('float') - var ff = 0.3 - assert_equal(true, ff == 0.3) - assert_equal(false, 0.4 == ff) - assert_equal(true, 0.1 == g:afloat) - assert_equal(false, g:afloat == 0.3) - - ff = 3.0 - assert_equal(true, ff == 3) - assert_equal(true, 3 == ff) - ff = 3.1 - assert_equal(false, ff == 3) - assert_equal(false, 3 == ff) - endif - - assert_equal(true, 'abc' == 'abc') - assert_equal(false, 'xyz' == 'abc') - assert_equal(true, g:astring == 'asdf') - assert_equal(false, 'xyz' == g:astring) + var lines =<< trim END + var trueVar = true + var falseVar = false + assert_equal(true, true == true) + assert_equal(false, true == + false) + assert_equal(true, true + == trueVar) + assert_equal(false, true == falseVar) + assert_equal(true, true == g:atrue) + assert_equal(false, g:atrue == false) + + assert_equal(true, v:none == v:none) + assert_equal(false, v:none == v:null) + assert_equal(true, g:anone == v:none) + assert_equal(false, v:none == g:anull) + + var nr0 = 0 + var nr61 = 61 + assert_equal(false, 2 == 0) + assert_equal(false, 2 == nr0) + assert_equal(true, 61 == 61) + assert_equal(true, 61 == nr61) + assert_equal(true, g:anint == 10) + assert_equal(false, 61 == g:anint) - assert_equal(false, 'abc' == 'aBc') - assert_equal(false, 'abc' ==# 'aBc') - assert_equal(true, 'abc' ==? 'aBc') + if has('float') + var ff = 0.3 + assert_equal(true, ff == 0.3) + assert_equal(false, 0.4 == ff) + assert_equal(true, 0.1 == g:afloat) + assert_equal(false, g:afloat == 0.3) + + ff = 3.0 + assert_equal(true, ff == 3) + assert_equal(true, 3 == ff) + ff = 3.1 + assert_equal(false, ff == 3) + assert_equal(false, 3 == ff) + endif - assert_equal(false, 'abc' == 'ABC') - set ignorecase - assert_equal(false, 'abc' == 'ABC') - assert_equal(false, 'abc' ==# 'ABC') - set noignorecase + assert_equal(true, 'abc' == 'abc') + assert_equal(false, 'xyz' == 'abc') + assert_equal(true, g:astring == 'asdf') + assert_equal(false, 'xyz' == g:astring) + + assert_equal(false, 'abc' == 'aBc') + assert_equal(false, 'abc' ==# 'aBc') + assert_equal(true, 'abc' ==? 'aBc') + + assert_equal(false, 'abc' == 'ABC') + set ignorecase + assert_equal(false, 'abc' == 'ABC') + assert_equal(false, 'abc' ==# 'ABC') + assert_equal(true, 'abc' ==? 'ABC') + set noignorecase + + var bb = 0z3f + assert_equal(true, 0z3f == bb) + assert_equal(false, bb == 0z4f) + assert_equal(true, g:ablob == 0z01ab) + assert_equal(false, 0z3f == g:ablob) + + assert_equal(true, [1, 2, 3] == [1, 2, 3]) + assert_equal(false, [1, 2, 3] == [2, 3, 1]) + assert_equal(true, [2, 3, 4] == g:alist) + assert_equal(false, g:alist == [2, 3, 1]) + assert_equal(false, [1, 2, 3] == []) + assert_equal(false, [1, 2, 3] == ['1', '2', '3']) + + assert_equal(true, #{one: 1, two: 2} == #{one: 1, two: 2}) + assert_equal(false, #{one: 1, two: 2} == #{one: 2, two: 2}) + assert_equal(false, #{one: 1, two: 2} == #{two: 2}) + assert_equal(false, #{one: 1, two: 2} == #{}) + assert_equal(true, g:adict == #{bbb: 8, aaa: 2}) + assert_equal(false, #{ccc: 9, aaa: 2} == g:adict) + + assert_equal(true, function('g:Test_expr4_equal') == function('g:Test_expr4_equal')) + assert_equal(false, function('g:Test_expr4_equal') == function('g:Test_expr4_is')) + + assert_equal(true, function('g:Test_expr4_equal', [123]) == function('g:Test_expr4_equal', [123])) + assert_equal(false, function('g:Test_expr4_equal', [123]) == function('g:Test_expr4_is', [123])) + assert_equal(false, function('g:Test_expr4_equal', [123]) == function('g:Test_expr4_equal', [999])) + + var OneFunc: func + var TwoFunc: func + OneFunc = function('len') + TwoFunc = function('len') + assert_equal(true, OneFunc('abc') == TwoFunc('123')) + END + CheckDefAndScriptSuccess(lines) CheckDefFailure(["var x = 'a' == xxx"], 'E1001:', 1) CheckDefExecFailure(['var items: any', 'eval 1', 'eval 2', 'if items == []', 'endif'], 'E691:', 4) - - var bb = 0z3f - assert_equal(true, 0z3f == bb) - assert_equal(false, bb == 0z4f) - assert_equal(true, g:ablob == 0z01ab) - assert_equal(false, 0z3f == g:ablob) - - assert_equal(true, [1, 2, 3] == [1, 2, 3]) - assert_equal(false, [1, 2, 3] == [2, 3, 1]) - assert_equal(true, [2, 3, 4] == g:alist) - assert_equal(false, g:alist == [2, 3, 1]) - assert_equal(false, [1, 2, 3] == []) - assert_equal(false, [1, 2, 3] == ['1', '2', '3']) - - assert_equal(true, #{one: 1, two: 2} == #{one: 1, two: 2}) - assert_equal(false, #{one: 1, two: 2} == #{one: 2, two: 2}) - assert_equal(false, #{one: 1, two: 2} == #{two: 2}) - assert_equal(false, #{one: 1, two: 2} == #{}) - assert_equal(true, g:adict == #{bbb: 8, aaa: 2}) - assert_equal(false, #{ccc: 9, aaa: 2} == g:adict) - - assert_equal(true, function('g:Test_expr4_equal') == function('g:Test_expr4_equal')) - assert_equal(false, function('g:Test_expr4_equal') == function('g:Test_expr4_is')) - - assert_equal(true, function('g:Test_expr4_equal', [123]) == function('g:Test_expr4_equal', [123])) - assert_equal(false, function('g:Test_expr4_equal', [123]) == function('g:Test_expr4_is', [123])) - assert_equal(false, function('g:Test_expr4_equal', [123]) == function('g:Test_expr4_equal', [999])) - - var OneFunc: func - var TwoFunc: func - OneFunc = function('len') - TwoFunc = function('len') - assert_equal(true, OneFunc('abc') == TwoFunc('123')) enddef " test != comperator def Test_expr4_notequal() - var trueVar = true - var falseVar = false - assert_equal(false, true != true) - assert_equal(true, true != - false) - assert_equal(false, true - != trueVar) - assert_equal(true, true != falseVar) - assert_equal(false, true != g:atrue) - assert_equal(true, g:atrue != false) - - assert_equal(false, v:none != v:none) - assert_equal(true, v:none != v:null) - assert_equal(false, g:anone != v:none) - assert_equal(true, v:none != g:anull) - - var nr55 = 55 - var nr0 = 55 - assert_equal(true, 2 != 0) - assert_equal(true, 2 != nr0) - assert_equal(false, 55 != 55) - assert_equal(false, 55 != nr55) - assert_equal(false, g:anint != 10) - assert_equal(true, 61 != g:anint) - - if has('float') - var ff = 0.3 - assert_equal(false, 0.3 != ff) - assert_equal(true, 0.4 != ff) - assert_equal(false, 0.1 != g:afloat) - assert_equal(true, g:afloat != 0.3) - - ff = 3.0 - assert_equal(false, ff != 3) - assert_equal(false, 3 != ff) - ff = 3.1 - assert_equal(true, ff != 3) - assert_equal(true, 3 != ff) - endif - - assert_equal(false, 'abc' != 'abc') - assert_equal(true, 'xyz' != 'abc') - assert_equal(false, g:astring != 'asdf') - assert_equal(true, 'xyz' != g:astring) - - assert_equal(true, 'abc' != 'ABC') - set ignorecase - assert_equal(true, 'abc' != 'ABC') - set noignorecase - - var bb = 0z3f - assert_equal(false, 0z3f != bb) - assert_equal(true, bb != 0z4f) - assert_equal(false, g:ablob != 0z01ab) - assert_equal(true, 0z3f != g:ablob) - - assert_equal(false, [1, 2, 3] != [1, 2, 3]) - assert_equal(true, [1, 2, 3] != [2, 3, 1]) - assert_equal(false, [2, 3, 4] != g:alist) - assert_equal(true, g:alist != [2, 3, 1]) - assert_equal(true, [1, 2, 3] != []) - assert_equal(true, [1, 2, 3] != ['1', '2', '3']) - - assert_equal(false, #{one: 1, two: 2} != #{one: 1, two: 2}) - assert_equal(true, #{one: 1, two: 2} != #{one: 2, two: 2}) - assert_equal(true, #{one: 1, two: 2} != #{two: 2}) - assert_equal(true, #{one: 1, two: 2} != #{}) - assert_equal(false, g:adict != #{bbb: 8, aaa: 2}) - assert_equal(true, #{ccc: 9, aaa: 2} != g:adict) + var lines =<< trim END + var trueVar = true + var falseVar = false + assert_equal(false, true != true) + assert_equal(true, true != + false) + assert_equal(false, true + != trueVar) + assert_equal(true, true != falseVar) + assert_equal(false, true != g:atrue) + assert_equal(true, g:atrue != false) + + assert_equal(false, v:none != v:none) + assert_equal(true, v:none != v:null) + assert_equal(false, g:anone != v:none) + assert_equal(true, v:none != g:anull) + + var nr55 = 55 + var nr0 = 55 + assert_equal(true, 2 != 0) + assert_equal(true, 2 != nr0) + assert_equal(false, 55 != 55) + assert_equal(false, 55 != nr55) + assert_equal(false, g:anint != 10) + assert_equal(true, 61 != g:anint) - assert_equal(false, function('g:Test_expr4_equal') != function('g:Test_expr4_equal')) - assert_equal(true, function('g:Test_expr4_equal') != function('g:Test_expr4_is')) + if has('float') + var ff = 0.3 + assert_equal(false, 0.3 != ff) + assert_equal(true, 0.4 != ff) + assert_equal(false, 0.1 != g:afloat) + assert_equal(true, g:afloat != 0.3) + + ff = 3.0 + assert_equal(false, ff != 3) + assert_equal(false, 3 != ff) + ff = 3.1 + assert_equal(true, ff != 3) + assert_equal(true, 3 != ff) + endif - assert_equal(false, function('g:Test_expr4_equal', [123]) != function('g:Test_expr4_equal', [123])) - assert_equal(true, function('g:Test_expr4_equal', [123]) != function('g:Test_expr4_is', [123])) - assert_equal(true, function('g:Test_expr4_equal', [123]) != function('g:Test_expr4_equal', [999])) + assert_equal(false, 'abc' != 'abc') + assert_equal(true, 'xyz' != 'abc') + assert_equal(false, g:astring != 'asdf') + assert_equal(true, 'xyz' != g:astring) + + assert_equal(true, 'abc' != 'ABC') + set ignorecase + assert_equal(true, 'abc' != 'ABC') + assert_equal(true, 'abc' !=# 'ABC') + assert_equal(false, 'abc' !=? 'ABC') + set noignorecase + + var bb = 0z3f + assert_equal(false, 0z3f != bb) + assert_equal(true, bb != 0z4f) + assert_equal(false, g:ablob != 0z01ab) + assert_equal(true, 0z3f != g:ablob) + + assert_equal(false, [1, 2, 3] != [1, 2, 3]) + assert_equal(true, [1, 2, 3] != [2, 3, 1]) + assert_equal(false, [2, 3, 4] != g:alist) + assert_equal(true, g:alist != [2, 3, 1]) + assert_equal(true, [1, 2, 3] != []) + assert_equal(true, [1, 2, 3] != ['1', '2', '3']) + + assert_equal(false, #{one: 1, two: 2} != #{one: 1, two: 2}) + assert_equal(true, #{one: 1, two: 2} != #{one: 2, two: 2}) + assert_equal(true, #{one: 1, two: 2} != #{two: 2}) + assert_equal(true, #{one: 1, two: 2} != #{}) + assert_equal(false, g:adict != #{bbb: 8, aaa: 2}) + assert_equal(true, #{ccc: 9, aaa: 2} != g:adict) + + assert_equal(false, function('g:Test_expr4_equal') != function('g:Test_expr4_equal')) + assert_equal(true, function('g:Test_expr4_equal') != function('g:Test_expr4_is')) + + assert_equal(false, function('g:Test_expr4_equal', [123]) != function('g:Test_expr4_equal', [123])) + assert_equal(true, function('g:Test_expr4_equal', [123]) != function('g:Test_expr4_is', [123])) + assert_equal(true, function('g:Test_expr4_equal', [123]) != function('g:Test_expr4_equal', [999])) + END + CheckDefAndScriptSuccess(lines) enddef " test > comperator def Test_expr4_greater() - assert_true(2 > 0) - assert_true(2 > - 1) - assert_false(2 > 2) - assert_false(2 > 3) - var nr2 = 2 - assert_true(nr2 > 0) - assert_true(nr2 > - 1) - assert_false(nr2 > 2) - assert_false(nr2 - > 3) - if has('float') - var ff = 2.0 - assert_true(ff > 0.0) - assert_true(ff > 1.0) - assert_false(ff > 2.0) - assert_false(ff > 3.0) - endif + var lines =<< trim END + assert_true(2 > 0) + assert_true(2 > + 1) + assert_false(2 > 2) + assert_false(2 > 3) + var nr2 = 2 + assert_true(nr2 > 0) + assert_true(nr2 > + 1) + assert_false(nr2 > 2) + assert_false(nr2 + > 3) + if has('float') + var ff = 2.0 + assert_true(ff > 0.0) + assert_true(ff > 1.0) + assert_false(ff > 2.0) + assert_false(ff > 3.0) + endif + END + CheckDefAndScriptSuccess(lines) enddef " test >= comperator def Test_expr4_greaterequal() - assert_true(2 >= 0) - assert_true(2 >= - 2) - assert_false(2 >= 3) - var nr2 = 2 - assert_true(nr2 >= 0) - assert_true(nr2 >= 2) - assert_false(nr2 >= 3) - if has('float') - var ff = 2.0 - assert_true(ff >= 0.0) - assert_true(ff >= 2.0) - assert_false(ff >= 3.0) - endif + var lines =<< trim END + assert_true(2 >= 0) + assert_true(2 >= + 2) + assert_false(2 >= 3) + var nr2 = 2 + assert_true(nr2 >= 0) + assert_true(nr2 >= 2) + assert_false(nr2 >= 3) + if has('float') + var ff = 2.0 + assert_true(ff >= 0.0) + assert_true(ff >= 2.0) + assert_false(ff >= 3.0) + endif + END + CheckDefAndScriptSuccess(lines) enddef " test < comperator def Test_expr4_smaller() - assert_false(2 < 0) - assert_false(2 < - 2) - assert_true(2 - < 3) - var nr2 = 2 - assert_false(nr2 < 0) - assert_false(nr2 < 2) - assert_true(nr2 < 3) - if has('float') - var ff = 2.0 - assert_false(ff < 0.0) - assert_false(ff < 2.0) - assert_true(ff < 3.0) - endif + var lines =<< trim END + assert_false(2 < 0) + assert_false(2 < + 2) + assert_true(2 + < 3) + var nr2 = 2 + assert_false(nr2 < 0) + assert_false(nr2 < 2) + assert_true(nr2 < 3) + if has('float') + var ff = 2.0 + assert_false(ff < 0.0) + assert_false(ff < 2.0) + assert_true(ff < 3.0) + endif + END + CheckDefAndScriptSuccess(lines) enddef " test <= comperator def Test_expr4_smallerequal() - assert_false(2 <= 0) - assert_false(2 <= - 1) - assert_true(2 - <= 2) - assert_true(2 <= 3) - var nr2 = 2 - assert_false(nr2 <= 0) - assert_false(nr2 <= 1) - assert_true(nr2 <= 2) - assert_true(nr2 <= 3) - if has('float') - var ff = 2.0 - assert_false(ff <= 0.0) - assert_false(ff <= 1.0) - assert_true(ff <= 2.0) - assert_true(ff <= 3.0) - endif + var lines =<< trim END + assert_false(2 <= 0) + assert_false(2 <= + 1) + assert_true(2 + <= 2) + assert_true(2 <= 3) + var nr2 = 2 + assert_false(nr2 <= 0) + assert_false(nr2 <= 1) + assert_true(nr2 <= 2) + assert_true(nr2 <= 3) + if has('float') + var ff = 2.0 + assert_false(ff <= 0.0) + assert_false(ff <= 1.0) + assert_true(ff <= 2.0) + assert_true(ff <= 3.0) + endif + END + CheckDefAndScriptSuccess(lines) enddef " test =~ comperator def Test_expr4_match() - assert_equal(false, '2' =~ '0') - assert_equal(false, '' - =~ '0') - assert_equal(true, '2' =~ - '[0-9]') + var lines =<< trim END + assert_equal(false, '2' =~ '0') + assert_equal(false, '' + =~ '0') + assert_equal(true, '2' =~ + '[0-9]') + set ignorecase + assert_equal(false, 'abc' =~ 'ABC') + assert_equal(false, 'abc' =~# 'ABC') + assert_equal(true, 'abc' =~? 'ABC') + set noignorecase + END + CheckDefAndScriptSuccess(lines) enddef " test !~ comperator def Test_expr4_nomatch() - assert_equal(true, '2' !~ '0') - assert_equal(true, '' - !~ '0') - assert_equal(false, '2' !~ - '[0-9]') + var lines =<< trim END + assert_equal(true, '2' !~ '0') + assert_equal(true, '' + !~ '0') + assert_equal(false, '2' !~ + '[0-9]') + END + CheckDefAndScriptSuccess(lines) enddef " test is comperator def Test_expr4_is() - var mylist = [2] - assert_false(mylist is [2]) - var other = mylist - assert_true(mylist is - other) + var lines =<< trim END + var mylist = [2] + assert_false(mylist is [2]) + var other = mylist + assert_true(mylist is + other) - var myblob = 0z1234 - assert_false(myblob - is 0z1234) - var otherblob = myblob - assert_true(myblob is otherblob) + var myblob = 0z1234 + assert_false(myblob + is 0z1234) + var otherblob = myblob + assert_true(myblob is otherblob) + END + CheckDefAndScriptSuccess(lines) enddef " test isnot comperator def Test_expr4_isnot() - var mylist = [2] - assert_true('2' isnot '0') - assert_true(mylist isnot [2]) - var other = mylist - assert_false(mylist isnot - other) + var lines =<< trim END + var mylist = [2] + assert_true('2' isnot '0') + assert_true(mylist isnot [2]) + var other = mylist + assert_false(mylist isnot + other) - var myblob = 0z1234 - assert_true(myblob - isnot 0z1234) - var otherblob = myblob - assert_false(myblob isnot otherblob) + var myblob = 0z1234 + assert_true(myblob + isnot 0z1234) + var otherblob = myblob + assert_false(myblob isnot otherblob) + END + CheckDefAndScriptSuccess(lines) enddef def RetVoid() @@ -896,25 +902,6 @@ def Test_expr4_vim9script() END CheckScriptFailure(lines, 'Cannot use "is" with number', 2) - # check 'ignorecase' not being used - lines =<< trim END - vim9script - set ignorecase - assert_equal(false, 'abc' == 'ABC') - assert_equal(false, 'abc' ==# 'ABC') - assert_equal(true, 'abc' ==? 'ABC') - - assert_equal(true, 'abc' != 'ABC') - assert_equal(true, 'abc' !=# 'ABC') - assert_equal(false, 'abc' !=? 'ABC') - - assert_equal(false, 'abc' =~ 'ABC') - assert_equal(false, 'abc' =~# 'ABC') - assert_equal(true, 'abc' =~? 'ABC') - set noignorecase - END - CheckScriptSuccess(lines) - # check missing white space lines =<< trim END vim9script @@ -1032,55 +1019,58 @@ endfunc " test addition, subtraction, concatenation def Test_expr5() - assert_equal(66, 60 + 6) - assert_equal(70, 60 + - g:anint) - assert_equal(9, g:thefour - + 5) - assert_equal(14, g:thefour + g:anint) - assert_equal([1, 2, 3, 4], [1] + g:alist) - - assert_equal(54, 60 - 6) - assert_equal(50, 60 - - g:anint) - assert_equal(-1, g:thefour - - 5) - assert_equal(-6, g:thefour - g:anint) - - assert_equal('hello', 'hel' .. 'lo') - assert_equal('hello 123', 'hello ' .. - 123) - assert_equal('hello 123', 'hello ' - .. 123) - assert_equal('123 hello', 123 .. ' hello') - assert_equal('123456', 123 .. 456) - - assert_equal('av:true', 'a' .. true) - assert_equal('av:false', 'a' .. false) - assert_equal('av:null', 'a' .. v:null) - assert_equal('av:none', 'a' .. v:none) - if has('float') - assert_equal('a0.123', 'a' .. 0.123) - endif + var lines =<< trim END + assert_equal(66, 60 + 6) + assert_equal(70, 60 + + g:anint) + assert_equal(9, g:thefour + + 5) + assert_equal(14, g:thefour + g:anint) + assert_equal([1, 2, 3, 4], [1] + g:alist) + + assert_equal(54, 60 - 6) + assert_equal(50, 60 - + g:anint) + assert_equal(-1, g:thefour + - 5) + assert_equal(-6, g:thefour - g:anint) + + assert_equal('hello', 'hel' .. 'lo') + assert_equal('hello 123', 'hello ' .. + 123) + assert_equal('hello 123', 'hello ' + .. 123) + assert_equal('123 hello', 123 .. ' hello') + assert_equal('123456', 123 .. 456) + + assert_equal('av:true', 'a' .. true) + assert_equal('av:false', 'a' .. false) + assert_equal('av:null', 'a' .. v:null) + assert_equal('av:none', 'a' .. v:none) + if has('float') + assert_equal('a0.123', 'a' .. 0.123) + endif - assert_equal([1, 2, 3, 4], [1, 2] + [3, 4]) - assert_equal(0z11223344, 0z1122 + 0z3344) - assert_equal(0z112201ab, 0z1122 - + g:ablob) - assert_equal(0z01ab3344, g:ablob + 0z3344) - assert_equal(0z01ab01ab, g:ablob + g:ablob) + assert_equal([1, 2, 3, 4], [1, 2] + [3, 4]) |