annotate src/testdir/test_filter_map.vim @ 20295:bc2c9ea94ec1 v8.2.0703

patch 8.2.0703: Vim9: closure cannot store value in outer context Commit: https://github.com/vim/vim/commit/b68b346e6db6d3f848e0a89905fcd7777b73c5d8 Author: Bram Moolenaar <Bram@vim.org> Date: Wed May 6 21:06:30 2020 +0200 patch 8.2.0703: Vim9: closure cannot store value in outer context Problem: Vim9: closure cannot store value in outer context. Solution: Make storing value in outer context work. Make :disassemble accept a function reference.
author Bram Moolenaar <Bram@vim.org>
date Wed, 06 May 2020 21:15:04 +0200
parents 94f05de75e9f
children 09143ab0fbbd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9416
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
1 " Test filter() and map()
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
2
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
3 " list with expression string
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
4 func Test_filter_map_list_expr_string()
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
5 " filter()
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
6 call assert_equal([2, 3, 4], filter([1, 2, 3, 4], 'v:val > 1'))
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
7 call assert_equal([3, 4], filter([1, 2, 3, 4], 'v:key > 1'))
9442
4fe3772969cf commit https://github.com/vim/vim/commit/a06ec8f345eabb66e5b7d7c0192cfebdde63115d
Christian Brabandt <cb@256bit.org>
parents: 9416
diff changeset
8 call assert_equal([], filter([1, 2, 3, 4], 0))
9416
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
9
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
10 " map()
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
11 call assert_equal([2, 4, 6, 8], map([1, 2, 3, 4], 'v:val * 2'))
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
12 call assert_equal([0, 2, 4, 6], map([1, 2, 3, 4], 'v:key * 2'))
9442
4fe3772969cf commit https://github.com/vim/vim/commit/a06ec8f345eabb66e5b7d7c0192cfebdde63115d
Christian Brabandt <cb@256bit.org>
parents: 9416
diff changeset
13 call assert_equal([9, 9, 9, 9], map([1, 2, 3, 4], 9))
9416
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
14 endfunc
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
15
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
16 " dict with expression string
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
17 func Test_filter_map_dict_expr_string()
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
18 let dict = {"foo": 1, "bar": 2, "baz": 3}
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
19
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
20 " filter()
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
21 call assert_equal({"bar": 2, "baz": 3}, filter(copy(dict), 'v:val > 1'))
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
22 call assert_equal({"foo": 1, "baz": 3}, filter(copy(dict), 'v:key > "bar"'))
9442
4fe3772969cf commit https://github.com/vim/vim/commit/a06ec8f345eabb66e5b7d7c0192cfebdde63115d
Christian Brabandt <cb@256bit.org>
parents: 9416
diff changeset
23 call assert_equal({}, filter(copy(dict), 0))
9416
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
24
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
25 " map()
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
26 call assert_equal({"foo": 2, "bar": 4, "baz": 6}, map(copy(dict), 'v:val * 2'))
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
27 call assert_equal({"foo": "f", "bar": "b", "baz": "b"}, map(copy(dict), 'v:key[0]'))
9442
4fe3772969cf commit https://github.com/vim/vim/commit/a06ec8f345eabb66e5b7d7c0192cfebdde63115d
Christian Brabandt <cb@256bit.org>
parents: 9416
diff changeset
28 call assert_equal({"foo": 9, "bar": 9, "baz": 9}, map(copy(dict), 9))
9416
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
29 endfunc
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
30
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
31 " list with funcref
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
32 func Test_filter_map_list_expr_funcref()
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
33 " filter()
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
34 func! s:filter1(index, val) abort
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
35 return a:val > 1
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
36 endfunc
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
37 call assert_equal([2, 3, 4], filter([1, 2, 3, 4], function('s:filter1')))
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
38
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
39 func! s:filter2(index, val) abort
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
40 return a:index > 1
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
41 endfunc
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
42 call assert_equal([3, 4], filter([1, 2, 3, 4], function('s:filter2')))
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
43
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
44 " map()
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
45 func! s:filter3(index, val) abort
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
46 return a:val * 2
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
47 endfunc
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
48 call assert_equal([2, 4, 6, 8], map([1, 2, 3, 4], function('s:filter3')))
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
49
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
50 func! s:filter4(index, val) abort
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
51 return a:index * 2
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
52 endfunc
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
53 call assert_equal([0, 2, 4, 6], map([1, 2, 3, 4], function('s:filter4')))
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
54 endfunc
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
55
17936
7f3283683d97 patch 8.1.1964: crash when using nested map() and filter()
Bram Moolenaar <Bram@vim.org>
parents: 15478
diff changeset
56 func Test_filter_map_nested()
7f3283683d97 patch 8.1.1964: crash when using nested map() and filter()
Bram Moolenaar <Bram@vim.org>
parents: 15478
diff changeset
57 let x = {"x":10}
7f3283683d97 patch 8.1.1964: crash when using nested map() and filter()
Bram Moolenaar <Bram@vim.org>
parents: 15478
diff changeset
58 let r = map(range(2), 'filter(copy(x), "1")')
7f3283683d97 patch 8.1.1964: crash when using nested map() and filter()
Bram Moolenaar <Bram@vim.org>
parents: 15478
diff changeset
59 call assert_equal([x, x], r)
17944
745c02392844 patch 8.1.1968: crash when using nested map()
Bram Moolenaar <Bram@vim.org>
parents: 17936
diff changeset
60
745c02392844 patch 8.1.1968: crash when using nested map()
Bram Moolenaar <Bram@vim.org>
parents: 17936
diff changeset
61 let r = map(copy(x), 'filter(copy(x), "1")')
745c02392844 patch 8.1.1968: crash when using nested map()
Bram Moolenaar <Bram@vim.org>
parents: 17936
diff changeset
62 call assert_equal({"x": x}, r)
17936
7f3283683d97 patch 8.1.1964: crash when using nested map() and filter()
Bram Moolenaar <Bram@vim.org>
parents: 15478
diff changeset
63 endfunc
7f3283683d97 patch 8.1.1964: crash when using nested map() and filter()
Bram Moolenaar <Bram@vim.org>
parents: 15478
diff changeset
64
9416
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
65 " dict with funcref
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
66 func Test_filter_map_dict_expr_funcref()
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
67 let dict = {"foo": 1, "bar": 2, "baz": 3}
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
68
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
69 " filter()
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
70 func! s:filter1(key, val) abort
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
71 return a:val > 1
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
72 endfunc
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
73 call assert_equal({"bar": 2, "baz": 3}, filter(copy(dict), function('s:filter1')))
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
74
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
75 func! s:filter2(key, val) abort
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
76 return a:key > "bar"
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
77 endfunc
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
78 call assert_equal({"foo": 1, "baz": 3}, filter(copy(dict), function('s:filter2')))
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
79
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
80 " map()
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
81 func! s:filter3(key, val) abort
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
82 return a:val * 2
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
83 endfunc
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
84 call assert_equal({"foo": 2, "bar": 4, "baz": 6}, map(copy(dict), function('s:filter3')))
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
85
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
86 func! s:filter4(key, val) abort
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
87 return a:key[0]
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
88 endfunc
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
89 call assert_equal({"foo": "f", "bar": "b", "baz": "b"}, map(copy(dict), function('s:filter4')))
cbf052ccb120 commit https://github.com/vim/vim/commit/b33c7eb5b813cb631b2b0ca5c4029e1788a09bde
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
90 endfunc
15478
051937ebaf22 patch 8.1.0747: map() with a bad expression doesn't give an error
Bram Moolenaar <Bram@vim.org>
parents: 9442
diff changeset
91
20109
e82996ad131f patch 8.2.0610: some tests are still old style
Bram Moolenaar <Bram@vim.org>
parents: 19233
diff changeset
92 func Test_map_filter_fails()
15478
051937ebaf22 patch 8.1.0747: map() with a bad expression doesn't give an error
Bram Moolenaar <Bram@vim.org>
parents: 9442
diff changeset
93 call assert_fails('call map([1], "42 +")', 'E15:')
051937ebaf22 patch 8.1.0747: map() with a bad expression doesn't give an error
Bram Moolenaar <Bram@vim.org>
parents: 9442
diff changeset
94 call assert_fails('call filter([1], "42 +")', 'E15:')
20109
e82996ad131f patch 8.2.0610: some tests are still old style
Bram Moolenaar <Bram@vim.org>
parents: 19233
diff changeset
95 call assert_fails("let l = map('abc', '\"> \" . v:val')", 'E712:')
e82996ad131f patch 8.2.0610: some tests are still old style
Bram Moolenaar <Bram@vim.org>
parents: 19233
diff changeset
96 call assert_fails("let l = filter('abc', '\"> \" . v:val')", 'E712:')
e82996ad131f patch 8.2.0610: some tests are still old style
Bram Moolenaar <Bram@vim.org>
parents: 19233
diff changeset
97 call assert_fails("let l = filter([1, 2, 3], '{}')", 'E728:')
e82996ad131f patch 8.2.0610: some tests are still old style
Bram Moolenaar <Bram@vim.org>
parents: 19233
diff changeset
98 call assert_fails("let l = filter({'k' : 10}, '{}')", 'E728:')
20128
0b35a7ffceb2 patch 8.2.0619: null dict is not handled like an empty dict
Bram Moolenaar <Bram@vim.org>
parents: 20109
diff changeset
99 call assert_fails("let l = filter([1, 2], {})", 'E731:')
20158
94f05de75e9f patch 8.2.0634: crash with null partial and blob
Bram Moolenaar <Bram@vim.org>
parents: 20156
diff changeset
100 call assert_equal(0, filter(test_null_list(), 0))
94f05de75e9f patch 8.2.0634: crash with null partial and blob
Bram Moolenaar <Bram@vim.org>
parents: 20156
diff changeset
101 call assert_equal(0, filter(test_null_dict(), 0))
20109
e82996ad131f patch 8.2.0610: some tests are still old style
Bram Moolenaar <Bram@vim.org>
parents: 19233
diff changeset
102 call assert_equal(0, map(test_null_list(), '"> " .. v:val'))
e82996ad131f patch 8.2.0610: some tests are still old style
Bram Moolenaar <Bram@vim.org>
parents: 19233
diff changeset
103 call assert_equal(0, map(test_null_dict(), '"> " .. v:val'))
20156
49694eceaa55 patch 8.2.0633: crash when using null partial in filter()
Bram Moolenaar <Bram@vim.org>
parents: 20128
diff changeset
104 call assert_equal([1, 2, 3], filter([1, 2, 3], test_null_function()))
49694eceaa55 patch 8.2.0633: crash when using null partial in filter()
Bram Moolenaar <Bram@vim.org>
parents: 20128
diff changeset
105 call assert_fails("let l = filter([1, 2], function('min'))", 'E118:')
49694eceaa55 patch 8.2.0633: crash when using null partial in filter()
Bram Moolenaar <Bram@vim.org>
parents: 20128
diff changeset
106 call assert_equal([1, 2, 3], filter([1, 2, 3], test_null_partial()))
49694eceaa55 patch 8.2.0633: crash when using null partial in filter()
Bram Moolenaar <Bram@vim.org>
parents: 20128
diff changeset
107 call assert_fails("let l = filter([1, 2], {a, b, c -> 1})", 'E119:')
15478
051937ebaf22 patch 8.1.0747: map() with a bad expression doesn't give an error
Bram Moolenaar <Bram@vim.org>
parents: 9442
diff changeset
108 endfunc
19233
04c164c971a3 patch 8.2.0175: crash when removing list element in map()
Bram Moolenaar <Bram@vim.org>
parents: 17944
diff changeset
109
04c164c971a3 patch 8.2.0175: crash when removing list element in map()
Bram Moolenaar <Bram@vim.org>
parents: 17944
diff changeset
110 func Test_map_and_modify()
04c164c971a3 patch 8.2.0175: crash when removing list element in map()
Bram Moolenaar <Bram@vim.org>
parents: 17944
diff changeset
111 let l = ["abc"]
04c164c971a3 patch 8.2.0175: crash when removing list element in map()
Bram Moolenaar <Bram@vim.org>
parents: 17944
diff changeset
112 " cannot change the list halfway a map()
04c164c971a3 patch 8.2.0175: crash when removing list element in map()
Bram Moolenaar <Bram@vim.org>
parents: 17944
diff changeset
113 call assert_fails('call map(l, "remove(l, 0)[0]")', 'E741:')
04c164c971a3 patch 8.2.0175: crash when removing list element in map()
Bram Moolenaar <Bram@vim.org>
parents: 17944
diff changeset
114
04c164c971a3 patch 8.2.0175: crash when removing list element in map()
Bram Moolenaar <Bram@vim.org>
parents: 17944
diff changeset
115 let d = #{a: 1, b: 2, c: 3}
04c164c971a3 patch 8.2.0175: crash when removing list element in map()
Bram Moolenaar <Bram@vim.org>
parents: 17944
diff changeset
116 call assert_fails('call map(d, "remove(d, v:key)[0]")', 'E741:')
04c164c971a3 patch 8.2.0175: crash when removing list element in map()
Bram Moolenaar <Bram@vim.org>
parents: 17944
diff changeset
117 call assert_fails('echo map(d, {k,v -> remove(d, k)})', 'E741:')
04c164c971a3 patch 8.2.0175: crash when removing list element in map()
Bram Moolenaar <Bram@vim.org>
parents: 17944
diff changeset
118 endfunc
20109
e82996ad131f patch 8.2.0610: some tests are still old style
Bram Moolenaar <Bram@vim.org>
parents: 19233
diff changeset
119
e82996ad131f patch 8.2.0610: some tests are still old style
Bram Moolenaar <Bram@vim.org>
parents: 19233
diff changeset
120 " vim: shiftwidth=2 sts=2 expandtab