Mercurial > vim
comparison src/testdir/test_listdict.vim @ 26638:6fd15d82e898 v8.2.3848
patch 8.2.3848: cannot use reduce() for a string
Commit: https://github.com/vim/vim/commit/0ccb5842f5fb103763d106c7aa364d758343c35a
Author: rbtnn <naru123456789@gmail.com>
Date: Sat Dec 18 18:33:46 2021 +0000
patch 8.2.3848: cannot use reduce() for a string
Problem: Cannot use reduce() for a string.
Solution: Make reduce() work with a string. (Naruhiko Nishino, closes https://github.com/vim/vim/issues/9366)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 18 Dec 2021 19:45:03 +0100 |
parents | 4d18b3a5254a |
children | 7c055fdd6200 |
comparison
equal
deleted
inserted
replaced
26637:eeac85e187e7 | 26638:6fd15d82e898 |
---|---|
1 " Tests for the List and Dict types | 1 " Tests for the List and Dict types |
2 scriptencoding utf-8 | |
2 | 3 |
3 source vim9.vim | 4 source vim9.vim |
4 | 5 |
5 func TearDown() | 6 func TearDown() |
6 " Run garbage collection after every test | 7 " Run garbage collection after every test |
934 call assert_fails("call sort([1, 2], function('min'), 1)", "E715:") | 935 call assert_fails("call sort([1, 2], function('min'), 1)", "E715:") |
935 call assert_fails("call sort([1, 2], function('invalid_func'))", "E700:") | 936 call assert_fails("call sort([1, 2], function('invalid_func'))", "E700:") |
936 call assert_fails("call sort([1, 2], function('min'))", "E118:") | 937 call assert_fails("call sort([1, 2], function('min'))", "E118:") |
937 endfunc | 938 endfunc |
938 | 939 |
939 " reduce a list or a blob | 940 " reduce a list, blob or string |
940 func Test_reduce() | 941 func Test_reduce() |
941 let lines =<< trim END | 942 let lines =<< trim END |
942 call assert_equal(1, reduce([], LSTART acc, val LMIDDLE acc + val LEND, 1)) | 943 call assert_equal(1, reduce([], LSTART acc, val LMIDDLE acc + val LEND, 1)) |
943 call assert_equal(10, reduce([1, 3, 5], LSTART acc, val LMIDDLE acc + val LEND, 1)) | 944 call assert_equal(10, reduce([1, 3, 5], LSTART acc, val LMIDDLE acc + val LEND, 1)) |
944 call assert_equal(2 * (2 * ((2 * 1) + 2) + 3) + 4, reduce([2, 3, 4], LSTART acc, val LMIDDLE 2 * acc + val LEND, 1)) | 945 call assert_equal(2 * (2 * ((2 * 1) + 2) + 3) + 4, reduce([2, 3, 4], LSTART acc, val LMIDDLE 2 * acc + val LEND, 1)) |
957 call assert_equal(1 + 0xaf + 0xbf + 0xcf, reduce(0zAFBFCF, LSTART acc, val LMIDDLE acc + val LEND, 1)) | 958 call assert_equal(1 + 0xaf + 0xbf + 0xcf, reduce(0zAFBFCF, LSTART acc, val LMIDDLE acc + val LEND, 1)) |
958 call assert_equal(2 * (2 * 1 + 0xaf) + 0xbf, 0zAFBF->reduce(LSTART acc, val LMIDDLE 2 * acc + val LEND, 1)) | 959 call assert_equal(2 * (2 * 1 + 0xaf) + 0xbf, 0zAFBF->reduce(LSTART acc, val LMIDDLE 2 * acc + val LEND, 1)) |
959 | 960 |
960 call assert_equal(0xff, reduce(0zff, LSTART acc, val LMIDDLE acc + val LEND)) | 961 call assert_equal(0xff, reduce(0zff, LSTART acc, val LMIDDLE acc + val LEND)) |
961 call assert_equal(2 * (2 * 0xaf + 0xbf) + 0xcf, reduce(0zAFBFCF, LSTART acc, val LMIDDLE 2 * acc + val LEND)) | 962 call assert_equal(2 * (2 * 0xaf + 0xbf) + 0xcf, reduce(0zAFBFCF, LSTART acc, val LMIDDLE 2 * acc + val LEND)) |
963 | |
964 call assert_equal('x,y,z', 'xyz'->reduce(LSTART acc, val LMIDDLE acc .. ',' .. val LEND)) | |
965 call assert_equal('', ''->reduce(LSTART acc, val LMIDDLE acc .. ',' .. val LEND, '')) | |
966 call assert_equal('あ,い,う,え,お,😊,💕', 'あいうえお😊💕'->reduce(LSTART acc, val LMIDDLE acc .. ',' .. val LEND)) | |
967 call assert_equal('😊,あ,い,う,え,お,💕', 'あいうえお💕'->reduce(LSTART acc, val LMIDDLE acc .. ',' .. val LEND, '😊')) | |
968 call assert_equal('ऊ,ॠ,ॡ', reduce('ऊॠॡ', LSTART acc, val LMIDDLE acc .. ',' .. val LEND)) | |
969 call assert_equal('c,à,t', reduce('càt', LSTART acc, val LMIDDLE acc .. ',' .. val LEND)) | |
970 call assert_equal('Å,s,t,r,ö,m', reduce('Åström', LSTART acc, val LMIDDLE acc .. ',' .. val LEND)) | |
971 call assert_equal('Å,s,t,r,ö,m', reduce('Åström', LSTART acc, val LMIDDLE acc .. ',' .. val LEND)) | |
972 call assert_equal(',a,b,c', reduce('abc', LSTART acc, val LMIDDLE acc .. ',' .. val LEND, test_null_string())) | |
962 END | 973 END |
963 call CheckLegacyAndVim9Success(lines) | 974 call CheckLegacyAndVim9Success(lines) |
964 | 975 |
965 call assert_equal({'x': 1, 'y': 1, 'z': 1 }, ['x', 'y', 'z']->reduce({ acc, val -> extend(acc, { val: 1 }) }, {})) | 976 call assert_equal({'x': 1, 'y': 1, 'z': 1 }, ['x', 'y', 'z']->reduce({ acc, val -> extend(acc, { val: 1 }) }, {})) |
966 vim9 assert_equal({'x': 1, 'y': 1, 'z': 1 }, ['x', 'y', 'z']->reduce((acc, val) => extend(acc, {[val]: 1 }), {})) | 977 vim9 assert_equal({'x': 1, 'y': 1, 'z': 1 }, ['x', 'y', 'z']->reduce((acc, val) => extend(acc, {[val]: 1 }), {})) |
967 | 978 |
968 call assert_fails("call reduce([], { acc, val -> acc + val })", 'E998: Reduce of an empty List with no initial value') | 979 call assert_fails("call reduce([], { acc, val -> acc + val })", 'E998: Reduce of an empty List with no initial value') |
969 call assert_fails("call reduce(0z, { acc, val -> acc + val })", 'E998: Reduce of an empty Blob with no initial value') | 980 call assert_fails("call reduce(0z, { acc, val -> acc + val })", 'E998: Reduce of an empty Blob with no initial value') |
970 | 981 call assert_fails("call reduce('', { acc, val -> acc + val })", 'E998: Reduce of an empty String with no initial value') |
971 call assert_fails("call reduce({}, { acc, val -> acc + val }, 1)", 'E897:') | 982 call assert_fails("call reduce(test_null_string(), { acc, val -> acc + val })", 'E998: Reduce of an empty String with no initial value') |
972 call assert_fails("call reduce(0, { acc, val -> acc + val }, 1)", 'E897:') | 983 |
973 call assert_fails("call reduce('', { acc, val -> acc + val }, 1)", 'E897:') | 984 call assert_fails("call reduce({}, { acc, val -> acc + val }, 1)", 'E1098:') |
985 call assert_fails("call reduce(0, { acc, val -> acc + val }, 1)", 'E1098:') | |
974 call assert_fails("call reduce([1, 2], 'Xdoes_not_exist')", 'E117:') | 986 call assert_fails("call reduce([1, 2], 'Xdoes_not_exist')", 'E117:') |
975 call assert_fails("echo reduce(0z01, { acc, val -> 2 * acc + val }, '')", 'E39:') | 987 call assert_fails("echo reduce(0z01, { acc, val -> 2 * acc + val }, '')", 'E39:') |
988 | |
989 call assert_fails("vim9 reduce(0, (acc, val) => (acc .. val), '')", 'E1252:') | |
990 call assert_fails("vim9 reduce({}, (acc, val) => (acc .. val), '')", 'E1252:') | |
991 call assert_fails("vim9 reduce(0.1, (acc, val) => (acc .. val), '')", 'E1252:') | |
992 call assert_fails("vim9 reduce(function('tr'), (acc, val) => (acc .. val), '')", 'E1252:') | |
993 call assert_fails("call reduce('', { acc, val -> acc + val }, 1)", 'E1253:') | |
994 call assert_fails("call reduce('', { acc, val -> acc + val }, {})", 'E1253:') | |
995 call assert_fails("call reduce('', { acc, val -> acc + val }, 0.1)", 'E1253:') | |
996 call assert_fails("call reduce('', { acc, val -> acc + val }, function('tr'))", 'E1253:') | |
976 | 997 |
977 let g:lut = [1, 2, 3, 4] | 998 let g:lut = [1, 2, 3, 4] |
978 func EvilRemove() | 999 func EvilRemove() |
979 call remove(g:lut, 1) | 1000 call remove(g:lut, 1) |
980 return 1 | 1001 return 1 |