summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-11-12 20:16:39 +0100
committerBram Moolenaar <Bram@vim.org>2020-11-12 20:16:39 +0100
commit659bb2275e1c407709e2ac949044d6b256de5550 (patch)
tree2f029858b01281251ad9d65ff2e08574435485c7
parent47c5ea44b975adca00eaacecee5c4108996178d9 (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.c10
-rw-r--r--src/list.c2
-rw-r--r--src/scriptfile.c3
-rw-r--r--src/testdir/test_vim9_expr.vim1438
-rw-r--r--src/version.c2
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])