v2 / vlib / v / gen / js / tests / array.v
147 lines · 123 sloc · 2.47 KB · 9035f43375af7eaa4ab3ec4cfd5575b9e7119380
Raw
1fn map_cb(s string) string {
2 return 'CB: ${s}'
3}
4
5fn filter_cb(n int) bool {
6 return n < 4
7}
8
9fn variadic(args ...int) {
10 println(args)
11 println(args[0])
12 println(args[1])
13}
14
15fn vararg_test() {
16 variadic(1, 2, 3)
17}
18
19// TODO: Remove `fn main` once vet supports scripts
20fn main() {
21 vararg_test()
22
23 // index initializations
24 list1 := []string{len: 3, init: 'Item ${index}'}
25 list2 := []string{len: 3, init: 'Item ${index}'}
26 list3 := []int{len: 3, init: index}
27 list4 := []string{len: 4, init: '${index}:${index * 2}'}
28 println(list1)
29 println(list2)
30 println(list1 == list2)
31 println(list3)
32 println(list4)
33
34 arr1 := ['Hello', 'JS', 'Backend']
35 mut arr2 := [1, 2, 3, 4, 5]
36
37 // Array slices
38 slice1 := unsafe { arr1[1..3] }
39 slice2 := unsafe { arr2[..3] }
40 slice3 := unsafe { arr2[3..] }
41
42 // Array indexes
43 idx1 := slice1[1]
44 arr2[0] = 1
45 arr2[0 + 1] = 2
46 println(arr2)
47
48 // TODO: This does not work for now
49 // arr2[0..1] = arr2[3..4]
50 // println(arr2)
51
52 // Array push operator
53 arr2 << 6
54 arr2 << [7, 8, 9]
55 println(arr2)
56 println('\n\n')
57
58 // String slices
59 mut slice4 := unsafe { idx1[..4] }
60 print('Back\t=> ')
61 println(slice4) // 'Back'
62
63 // String indexes
64 idx2 := slice4[0]
65 print('66\t=> ')
66 println(idx2)
67 // TODO:
68 // slice4[3] = `c`
69
70 // Maps
71 mut m := map[string]string{}
72 key := 'key'
73 m[key] = 'value'
74 val := m['key']
75 print('value\t=> ')
76 println(val)
77
78 // 'in' / '!in'
79 print('true\t=> ')
80 println('JS' in arr1)
81 print('false\t=> ')
82 println(3 !in arr2)
83 print('true\t=> ')
84 println('key' in m)
85 print('true\t=> ')
86 println('badkey' !in m)
87
88 // for in
89 for _ in arr1 {}
90 println('0 to 8\t=>')
91 for i, _ in arr2 {
92 println(i)
93 }
94 println('\n\n4 to 5\t=> ')
95 for _, v in slice3 {
96 println(v)
97 }
98
99 println(int(1.5))
100
101 println('\n\n')
102
103 // map
104 a := arr1.map('VAL: ${it}')
105 b := arr1.map(map_cb)
106 c := arr1.map(map_cb(it))
107 d := arr1.map(fn (a string) string {
108 return 'ANON: ${a}'
109 })
110 // I don't know when this would ever be used,
111 // but it's what the C backend does ¯\_(ツ)_/¯
112 e := arr1.map(456)
113
114 println(a)
115 println(b)
116 println(c)
117 println(d)
118 println(e)
119
120 println('\n\n')
121
122 // filter
123 aa := arr2.filter(it < 4)
124 bb := arr2.filter(filter_cb)
125 cc := arr2.filter(filter_cb(it))
126 dd := arr2.filter(fn (a int) bool {
127 return a < 4
128 })
129
130 println(aa)
131 println(bb)
132 println(cc)
133 println(dd)
134
135 // fixed arrays: implemented as normal arrays
136 f1 := [1, 2, 3, 4, 5]!
137 mut f2 := [8]f32{}
138 f2[0] = f32(1.23)
139 f3 := ['foo', 'bar']!
140 f4 := [u64(0xffffffffffffffff), 0xdeadface]!
141
142 println('
143${f1}
144${f2}
145${f3}
146${f4}')
147}
148