v2 / vlib / v / tests / generics / generic_lambda_inference_test.v
32 lines · 27 sloc · 757 bytes · 95ea2586097a24ce00d0987f29af93f0ac2987e8
Raw
1import arrays
2
3const result = ['0: a', '1: b', '2: c', '3: d']
4
5fn mapi[T, U](arr []T, callback fn (int, T) U) []U {
6 mut mapped := []U{}
7 for i, el in arr {
8 mapped << callback(i, el)
9 }
10 return mapped
11}
12
13fn test_main() {
14 arr := [`a`, `b`, `c`, `d`]
15 arr_1 := mapi(arr, |i, e| '${i}: ${e}')
16 assert arr_1 == result
17 arr_2 := mapi[rune, string](arr, |i, e| '${i}: ${e}')
18 assert arr_2 == result
19 arr_3 := mapi(arr, fn (i int, e rune) string {
20 return '${i}: ${e}'
21 })
22 assert arr_3 == result
23}
24
25fn count_chars_fold(strs []string) int {
26 return arrays.fold(strs, 0, |acc, s| acc + utf8_str_visible_length(s))
27}
28
29fn test_lambda_inferred_for_multi_generic_fold_callback() {
30 input := ['abc', 'def', 'здравей']
31 assert count_chars_fold(input) == 13
32}
33