@@ -620,6 +620,37 @@ func Test_reverse_sort_uniq()
620
620
call assert_fails('call reverse("")', 'E899:')
621
621
endfunc
622
622
623
+
" reduce a list or a blob
624
+
func Test_reduce()
625
+
call assert_equal(1, reduce([], { acc, val -> acc + val }, 1))
626
+
call assert_equal(10, reduce([1, 3, 5], { acc, val -> acc + val }, 1))
627
+
call assert_equal(2 * (2 * ((2 * 1) + 2) + 3) + 4, reduce([2, 3, 4], { acc, val -> 2 * acc + val }, 1))
628
+
call assert_equal('a x y z', ['x', 'y', 'z']->reduce({ acc, val -> acc .. ' ' .. val}, 'a'))
629
+
call assert_equal(#{ x: 1, y: 1, z: 1 }, ['x', 'y', 'z']->reduce({ acc, val -> extend(acc, { val: 1 }) }, {}))
630
+
call assert_equal([0, 1, 2, 3], reduce([1, 2, 3], function('add'), [0]))
631
+
632
+
let l = ['x', 'y', 'z']
633
+
call assert_equal(42, reduce(l, function('get'), #{ x: #{ y: #{ z: 42 } } }))
634
+
call assert_equal(['x', 'y', 'z'], l)
635
+
636
+
call assert_equal(1, reduce([1], { acc, val -> acc + val }))
637
+
call assert_equal('x y z', reduce(['x', 'y', 'z'], { acc, val -> acc .. ' ' .. val }))
638
+
call assert_equal(120, range(1, 5)->reduce({ acc, val -> acc * val }))
639
+
call assert_fails("call reduce([], { acc, val -> acc + val })", 'E998: Reduce of an empty List with no initial value')
640
+
641
+
call assert_equal(1, reduce(0z, { acc, val -> acc + val }, 1))
642
+
call assert_equal(1 + 0xaf + 0xbf + 0xcf, reduce(0zAFBFCF, { acc, val -> acc + val }, 1))
643
+
call assert_equal(2 * (2 * 1 + 0xaf) + 0xbf, 0zAFBF->reduce({ acc, val -> 2 * acc + val }, 1))
644
+
645
+
call assert_equal(0xff, reduce(0zff, { acc, val -> acc + val }))
646
+
call assert_equal(2 * (2 * 0xaf + 0xbf) + 0xcf, reduce(0zAFBFCF, { acc, val -> 2 * acc + val }))
647
+
call assert_fails("call reduce(0z, { acc, val -> acc + val })", 'E998: Reduce of an empty Blob with no initial value')
648
+
649
+
call assert_fails("call reduce({}, { acc, val -> acc + val }, 1)", 'E897:')
650
+
call assert_fails("call reduce(0, { acc, val -> acc + val }, 1)", 'E897:')
651
+
call assert_fails("call reduce('', { acc, val -> acc + val }, 1)", 'E897:')
652
+
endfunc
653
+
623
654
" splitting a string to a List
624
655
func Test_str_split()
625
656
call assert_equal(['aa', 'bb'], split(' aa bb '))
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4