Mercurial > vim
annotate src/testdir/test_filter_map.vim @ 18584:351659cbadb4 v8.1.2286
patch 8.1.2286: using border highlight in popup window leaks memory
Commit: https://github.com/vim/vim/commit/622b64603748cceafd47f7537b96610e824e0680
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Nov 10 15:16:54 2019 +0100
patch 8.1.2286: using border highlight in popup window leaks memory
Problem: Using border highlight in popup window leaks memory.
Solution: Free memory before overwriting. (Dominique Pelle, closes https://github.com/vim/vim/issues/5203)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 10 Nov 2019 15:30:03 +0100 |
parents | 745c02392844 |
children | 04c164c971a3 |
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 |
051937ebaf22
patch 8.1.0747: map() with a bad expression doesn't give an error
Bram Moolenaar <Bram@vim.org>
parents:
9442
diff
changeset
|
92 func Test_map_fails() |
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:') |
051937ebaf22
patch 8.1.0747: map() with a bad expression doesn't give an error
Bram Moolenaar <Bram@vim.org>
parents:
9442
diff
changeset
|
95 endfunc |