| 1 | import arrays |
| 2 | |
| 3 | const result = ['0: a', '1: b', '2: c', '3: d'] |
| 4 | |
| 5 | fn 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 | |
| 13 | fn 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 | |
| 25 | fn count_chars_fold(strs []string) int { |
| 26 | return arrays.fold(strs, 0, |acc, s| acc + utf8_str_visible_length(s)) |
| 27 | } |
| 28 | |
| 29 | fn test_lambda_inferred_for_multi_generic_fold_callback() { |
| 30 | input := ['abc', 'def', 'здравей'] |
| 31 | assert count_chars_fold(input) == 13 |
| 32 | } |
| 33 | |