summaryrefslogtreecommitdiffstats
path: root/src/testdir/test_expr.vim
diff options
context:
space:
mode:
authorYegappan Lakshmanan <yegappan@yahoo.com>2023-10-15 09:44:50 +0200
committerChristian Brabandt <cb@256bit.org>2023-10-15 09:44:50 +0200
commitde3295dd0c68a8d7540a751a99ee056fd5b9a7a4 (patch)
tree4028cf0eca80889cfaccccf7af4c392ba6b4db88 /src/testdir/test_expr.vim
parentae3cfa47d3dcee75061db598eb19879693b2393a (diff)
patch 9.0.2027: Vim9: no support for bitwise operators in lambda funcsv9.0.2027
Problem: Vim9: no support for bitwise operators in lambda funcs Solution: move "evaluate" assignment a bit up in order to decide to perform bitwise operations closes: #13342 closes: #13345 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Diffstat (limited to 'src/testdir/test_expr.vim')
-rw-r--r--src/testdir/test_expr.vim44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/testdir/test_expr.vim b/src/testdir/test_expr.vim
index 40b7809d15..d94ba4b58c 100644
--- a/src/testdir/test_expr.vim
+++ b/src/testdir/test_expr.vim
@@ -1041,6 +1041,50 @@ func Test_bitwise_shift()
assert_equal(16, a)
END
call v9.CheckDefAndScriptSuccess(lines)
+
+ let lines =<< trim END
+ # Use in a lambda function
+ const DivBy2Ref_A = (n: number): number => n >> 1
+ assert_equal(16, DivBy2Ref_A(32))
+ const DivBy2Ref_B = (n: number): number => (<number>n) >> 1
+ assert_equal(16, DivBy2Ref_B(32))
+ const MultBy2Ref_A = (n: number): number => n << 1
+ assert_equal(8, MultBy2Ref_A(4))
+ const MultBy2Ref_B = (n: number): number => (<number>n) << 1
+ assert_equal(8, MultBy2Ref_B(4))
+
+ def DivBy2_A(): func(number): number
+ return (n: number): number => n >> 1
+ enddef
+ assert_equal(16, DivBy2_A()(32))
+ def DivBy2_B(): func(number): number
+ return (n: number): number => (<number>n) >> 1
+ enddef
+ assert_equal(16, DivBy2_B()(32))
+ def MultBy2_A(): func(number): number
+ return (n: number): number => n << 1
+ enddef
+ assert_equal(64, MultBy2_A()(32))
+ def MultBy2_B(): func(number): number
+ return (n: number): number => (<number>n) << 1
+ enddef
+ assert_equal(64, MultBy2_B()(32))
+ END
+ call v9.CheckDefAndScriptSuccess(lines)
+
+ " Use in a legacy lambda function
+ const DivBy2Ref_A = {n -> n >> 1}
+ call assert_equal(16, DivBy2Ref_A(32))
+ func DivBy2_A()
+ return {n -> n >> 1}
+ endfunc
+ call assert_equal(16, DivBy2_A()(32))
+ const MultBy2Ref_A = {n -> n << 1}
+ call assert_equal(64, MultBy2Ref_A(32))
+ func MultBy2_A()
+ return {n -> n << 1}
+ endfunc
+ call assert_equal(64, MultBy2_A()(32))
endfunc
" vim: shiftwidth=2 sts=2 expandtab