v2 / vlib / arrays / arrays_fold_test.v
41 lines · 35 sloc · 1.11 KB · e2e5cf8db56f3562c7baa735061690be936bdf3e
Raw
1import arrays
2
3type MyInt = int
4
5interface FoldCyclable {
6 id() int
7}
8
9struct FoldWheel {
10 v int
11}
12
13fn (w FoldWheel) id() int {
14 return w.v
15}
16
17fn test_main() {
18 assert arrays.fold[int, []int]([1, 2, 3, 4], []int{}, fn (r []int, t int) []int {
19 return arrays.merge(r, [t])
20 }) == [1, 2, 3, 4]
21 assert arrays.fold[string, []string](['a', 'b', 'c', 'd'], []string{}, fn (r []string, t string) []string {
22 return arrays.merge(r, [t])
23 }) == ['a', 'b', 'c', 'd']
24 assert arrays.fold[bool, []bool]([true, false], []bool{}, fn (r []bool, t bool) []bool {
25 return arrays.merge(r, [t])
26 }) == [false, true]
27 assert arrays.fold[MyInt, []MyInt]([MyInt(0), 1], []MyInt{}, fn (r []main.MyInt, t MyInt) []main.MyInt {
28 return arrays.merge(r, [t])
29 }) == [MyInt(0), 1]
30 assert arrays.fold([1, 2, 3, 4], [5, 6, 7], fn (r []int, t int) []int {
31 return r.map(it * t)
32 }) == [120, 144, 168]
33}
34
35fn test_fold_with_interface_accumulator() {
36 items := [FoldWheel{1}, FoldWheel{2}]
37 result := arrays.fold[FoldWheel, FoldCyclable](items, FoldCyclable(FoldWheel{}), fn (_ FoldCyclable, elem FoldWheel) FoldCyclable {
38 return elem
39 })
40 assert result.id() == 2
41}
42