forked from aniani/vim
patch 8.2.0288: Vim9: some float and blob operators not tested
Problem: Vim9: some float and blob operators not tested. Solution: Add float and blob tests. Fix addition.
This commit is contained in:
@@ -286,32 +286,54 @@ enddef
|
|||||||
|
|
||||||
" test > comperator
|
" test > comperator
|
||||||
def Test_expr4_greater()
|
def Test_expr4_greater()
|
||||||
assert_equal(true, 2 > 0)
|
assert_true(2 > 0)
|
||||||
assert_equal(true, 2 > 1)
|
assert_true(2 > 1)
|
||||||
assert_equal(false, 2 > 2)
|
assert_false(2 > 2)
|
||||||
assert_equal(false, 2 > 3)
|
assert_false(2 > 3)
|
||||||
|
if has('float')
|
||||||
|
assert_true(2.0 > 0.0)
|
||||||
|
assert_true(2.0 > 1.0)
|
||||||
|
assert_false(2.0 > 2.0)
|
||||||
|
assert_false(2.0 > 3.0)
|
||||||
|
endif
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
" test >= comperator
|
" test >= comperator
|
||||||
def Test_expr4_greaterequal()
|
def Test_expr4_greaterequal()
|
||||||
assert_equal(true, 2 >= 0)
|
assert_true(2 >= 0)
|
||||||
assert_equal(true, 2 >= 2)
|
assert_true(2 >= 2)
|
||||||
assert_equal(false, 2 >= 3)
|
assert_false(2 >= 3)
|
||||||
|
if has('float')
|
||||||
|
assert_true(2.0 >= 0.0)
|
||||||
|
assert_true(2.0 >= 2.0)
|
||||||
|
assert_false(2.0 >= 3.0)
|
||||||
|
endif
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
" test < comperator
|
" test < comperator
|
||||||
def Test_expr4_smaller()
|
def Test_expr4_smaller()
|
||||||
assert_equal(false, 2 < 0)
|
assert_false(2 < 0)
|
||||||
assert_equal(false, 2 < 2)
|
assert_false(2 < 2)
|
||||||
assert_equal(true, 2 < 3)
|
assert_true(2 < 3)
|
||||||
|
if has('float')
|
||||||
|
assert_false(2.0 < 0.0)
|
||||||
|
assert_false(2.0 < 2.0)
|
||||||
|
assert_true(2.0 < 3.0)
|
||||||
|
endif
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
" test <= comperator
|
" test <= comperator
|
||||||
def Test_expr4_smallerequal()
|
def Test_expr4_smallerequal()
|
||||||
assert_equal(false, 2 <= 0)
|
assert_false(2 <= 0)
|
||||||
assert_equal(false, 2 <= 1)
|
assert_false(2 <= 1)
|
||||||
assert_equal(true, 2 <= 2)
|
assert_true(2 <= 2)
|
||||||
assert_equal(true, 2 <= 3)
|
assert_true(2 <= 3)
|
||||||
|
if has('float')
|
||||||
|
assert_false(2.0 <= 0.0)
|
||||||
|
assert_false(2.0 <= 1.0)
|
||||||
|
assert_true(2.0 <= 2.0)
|
||||||
|
assert_true(2.0 <= 3.0)
|
||||||
|
endif
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
" test =~ comperator
|
" test =~ comperator
|
||||||
@@ -329,18 +351,28 @@ enddef
|
|||||||
" test is comperator
|
" test is comperator
|
||||||
def Test_expr4_is()
|
def Test_expr4_is()
|
||||||
let mylist = [2]
|
let mylist = [2]
|
||||||
assert_equal(false, mylist is [2])
|
assert_false(mylist is [2])
|
||||||
let other = mylist
|
let other = mylist
|
||||||
assert_equal(true, mylist is other)
|
assert_true(mylist is other)
|
||||||
|
|
||||||
|
let myblob = 0z1234
|
||||||
|
assert_false(myblob is 0z1234)
|
||||||
|
let otherblob = myblob
|
||||||
|
assert_true(myblob is otherblob)
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
" test isnot comperator
|
" test isnot comperator
|
||||||
def Test_expr4_isnot()
|
def Test_expr4_isnot()
|
||||||
let mylist = [2]
|
let mylist = [2]
|
||||||
assert_equal(true, '2' isnot '0')
|
assert_true('2' isnot '0')
|
||||||
assert_equal(true, mylist isnot [2])
|
assert_true(mylist isnot [2])
|
||||||
let other = mylist
|
let other = mylist
|
||||||
assert_equal(false, mylist isnot other)
|
assert_false(mylist isnot other)
|
||||||
|
|
||||||
|
let myblob = 0z1234
|
||||||
|
assert_true(myblob isnot 0z1234)
|
||||||
|
let otherblob = myblob
|
||||||
|
assert_false(myblob isnot otherblob)
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
def RetVoid()
|
def RetVoid()
|
||||||
@@ -427,6 +459,12 @@ def Test_expr5()
|
|||||||
assert_equal('hello 123', 'hello ' .. 123)
|
assert_equal('hello 123', 'hello ' .. 123)
|
||||||
assert_equal('123 hello', 123 .. ' hello')
|
assert_equal('123 hello', 123 .. ' hello')
|
||||||
assert_equal('123456', 123 .. 456)
|
assert_equal('123456', 123 .. 456)
|
||||||
|
|
||||||
|
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)
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
def Test_expr5_float()
|
def Test_expr5_float()
|
||||||
@@ -466,6 +504,13 @@ func Test_expr5_fails()
|
|||||||
call CheckDefFailure("let x = '1'..'2'", msg)
|
call CheckDefFailure("let x = '1'..'2'", msg)
|
||||||
call CheckDefFailure("let x = '1' ..'2'", msg)
|
call CheckDefFailure("let x = '1' ..'2'", msg)
|
||||||
call CheckDefFailure("let x = '1'.. '2'", msg)
|
call CheckDefFailure("let x = '1'.. '2'", msg)
|
||||||
|
|
||||||
|
call CheckDefFailure("let x = 0z1122 + 33", 'E1035')
|
||||||
|
call CheckDefFailure("let x = 0z1122 + [3]", 'E1035')
|
||||||
|
call CheckDefFailure("let x = 0z1122 + 'asd'", 'E1035')
|
||||||
|
call CheckDefFailure("let x = 33 + 0z1122", 'E1035')
|
||||||
|
call CheckDefFailure("let x = [3] + 0z1122", 'E1035')
|
||||||
|
call CheckDefFailure("let x = 'asdf' + 0z1122", 'E1035')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
" test multiply, divide, modulo
|
" test multiply, divide, modulo
|
||||||
@@ -650,6 +695,10 @@ def Test_expr7_list()
|
|||||||
assert_equal(g:list_empty, [])
|
assert_equal(g:list_empty, [])
|
||||||
assert_equal(g:list_empty, [ ])
|
assert_equal(g:list_empty, [ ])
|
||||||
assert_equal(g:list_mixed, [1, 'b', false])
|
assert_equal(g:list_mixed, [1, 'b', false])
|
||||||
|
|
||||||
|
call CheckDefExecFailure("let x = g:anint[3]", 'E714:')
|
||||||
|
call CheckDefExecFailure("let x = g:list_mixed['xx']", 'E39:')
|
||||||
|
call CheckDefExecFailure("let x = g:list_empty[3]", 'E684:')
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
def Test_expr7_lambda()
|
def Test_expr7_lambda()
|
||||||
@@ -667,6 +716,9 @@ def Test_expr7_dict()
|
|||||||
let key = 'one'
|
let key = 'one'
|
||||||
let val = 1
|
let val = 1
|
||||||
assert_equal(g:dict_one, {key: val})
|
assert_equal(g:dict_one, {key: val})
|
||||||
|
|
||||||
|
call CheckDefExecFailure("let x = g:anint.member", 'E715:')
|
||||||
|
call CheckDefExecFailure("let x = g:dict_empty.member", 'E716:')
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
def Test_expr7_option()
|
def Test_expr7_option()
|
||||||
|
@@ -738,6 +738,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
288,
|
||||||
/**/
|
/**/
|
||||||
287,
|
287,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -374,6 +374,8 @@ generate_two_op(cctx_T *cctx, char_u *op)
|
|||||||
switch (*op)
|
switch (*op)
|
||||||
{
|
{
|
||||||
case '+': if (vartype != VAR_LIST && vartype != VAR_BLOB
|
case '+': if (vartype != VAR_LIST && vartype != VAR_BLOB
|
||||||
|
&& type1->tt_type != VAR_UNKNOWN
|
||||||
|
&& type2->tt_type != VAR_UNKNOWN
|
||||||
&& check_number_or_float(
|
&& check_number_or_float(
|
||||||
type1->tt_type, type2->tt_type, op) == FAIL)
|
type1->tt_type, type2->tt_type, op) == FAIL)
|
||||||
return FAIL;
|
return FAIL;
|
||||||
@@ -1074,8 +1076,15 @@ generate_MEMBER(cctx_T *cctx, char_u *name, size_t len)
|
|||||||
return FAIL;
|
return FAIL;
|
||||||
isn->isn_arg.string = vim_strnsave(name, (int)len);
|
isn->isn_arg.string = vim_strnsave(name, (int)len);
|
||||||
|
|
||||||
// change dict type to dict member type
|
// check for dict type
|
||||||
type = ((type_T **)stack->ga_data)[stack->ga_len - 1];
|
type = ((type_T **)stack->ga_data)[stack->ga_len - 1];
|
||||||
|
if (type->tt_type != VAR_DICT && type != &t_any)
|
||||||
|
{
|
||||||
|
emsg(_(e_dictreq));
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
// change dict type to dict member type
|
||||||
|
if (type->tt_type == VAR_DICT)
|
||||||
((type_T **)stack->ga_data)[stack->ga_len - 1] = type->tt_member;
|
((type_T **)stack->ga_data)[stack->ga_len - 1] = type->tt_member;
|
||||||
|
|
||||||
return OK;
|
return OK;
|
||||||
@@ -2370,6 +2379,7 @@ compile_subscript(
|
|||||||
emsg(_(e_listreq));
|
emsg(_(e_listreq));
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
|
if ((*typep)->tt_type == VAR_LIST)
|
||||||
*typep = (*typep)->tt_member;
|
*typep = (*typep)->tt_member;
|
||||||
}
|
}
|
||||||
else if (**arg == '.' && (*arg)[1] != '.')
|
else if (**arg == '.' && (*arg)[1] != '.')
|
||||||
@@ -2387,7 +2397,6 @@ compile_subscript(
|
|||||||
semsg(_(e_syntax_at), *arg);
|
semsg(_(e_syntax_at), *arg);
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
// TODO: check type is dict
|
|
||||||
if (generate_MEMBER(cctx, *arg, p - *arg) == FAIL)
|
if (generate_MEMBER(cctx, *arg, p - *arg) == FAIL)
|
||||||
return FAIL;
|
return FAIL;
|
||||||
*arg = p;
|
*arg = p;
|
||||||
@@ -4964,6 +4973,10 @@ compile_def_function(ufunc_T *ufunc, int set_return_type)
|
|||||||
|
|
||||||
default:
|
default:
|
||||||
// Not recognized, execute with do_cmdline_cmd().
|
// Not recognized, execute with do_cmdline_cmd().
|
||||||
|
// TODO:
|
||||||
|
// CMD_echomsg
|
||||||
|
// CMD_execute
|
||||||
|
// etc.
|
||||||
generate_EXEC(&cctx, line);
|
generate_EXEC(&cctx, line);
|
||||||
line = (char_u *)"";
|
line = (char_u *)"";
|
||||||
break;
|
break;
|
||||||
|
Reference in New Issue
Block a user