1 | suite 'Arrays', ->
|
2 |
|
3 | suite 'Basic Literals', ->
|
4 |
|
5 | test 'simple arrays', ->
|
6 | eq 0, [].length
|
7 | eq 0, [ ].length
|
8 | eq 1, [0].length
|
9 | eq 1, [ 0 ].length
|
10 | eq 2, [0,0].length
|
11 | eq 2, [0, 0].length
|
12 | eq 2, [0 ,0].length
|
13 | eq 2, [ 0 , 0 ].length
|
14 | eq 3, [0,0,0].length
|
15 | eq 3, [0, 0, 0].length
|
16 | eq 3, [ 0 , 0 , 0 ].length
|
17 | eq k, v for v, k in [0, 1, 2, 3]
|
18 | eq k, v for v, k in [0, 1, 2, 3,]
|
19 | return
|
20 |
|
21 | test 'arrays spread over many lines', ->
|
22 | eq 0, [
|
23 | ].length
|
24 | eq 1, [
|
25 | 0
|
26 | ].length
|
27 | eq 1, [
|
28 | 0,
|
29 | ].length
|
30 | eq 2, [
|
31 | 0
|
32 | 0
|
33 | ].length
|
34 | eq 2, [
|
35 | 0,
|
36 | 0
|
37 | ].length
|
38 | eq 2, [
|
39 | 0,
|
40 | 0,
|
41 | ].length
|
42 | eq k, v for v, k in [
|
43 | 0
|
44 | 1
|
45 | 2
|
46 | 3
|
47 | ]
|
48 | return
|
49 |
|
50 | test 'nested arrays', ->
|
51 | eq 1, [[]].length
|
52 | eq 0, [[]][0].length
|
53 | eq 1, [[0]].length
|
54 | eq 1, [[0]][0].length
|
55 | eq 2, [[0],[1]].length
|
56 | eq 0, [[0],[1]][0][0]
|
57 | eq 1, [[0],[1]][1][0]
|
58 | eq 3, [
|
59 | []
|
60 | [[], []]
|
61 | [ [[], []], [] ]
|
62 | ].length
|
63 |
|
64 | test 'mixed newline/comma separators', ->
|
65 | eq k, v for v, k in [
|
66 | 0
|
67 | 1, 2, 3,
|
68 | 4, 5, 6
|
69 | 7, 8, 9,
|
70 | ]
|
71 | return
|
72 |
|
73 | test 'listed functions', ->
|
74 | a = [
|
75 | (x) -> x * x
|
76 | ->
|
77 | (x) -> x
|
78 | ]
|
79 | ok a.length is 3
|
80 | b = [(x) -> x * x, ->, (x) -> x, ->]
|
81 | ok b.length is 4
|
82 |
|
83 |
|
84 |
|
85 |
|
86 |
|
87 |
|
88 |
|
89 |
|
90 |
|
91 |
|
92 |
|
93 |
|
94 |
|
95 |
|
96 |
|
97 |
|
98 |
|
99 |
|
100 |
|
101 |
|
102 |
|
103 |
|
104 |
|
105 |
|
106 |
|
107 |
|
108 |
|
109 |
|
110 |
|
111 |
|
112 |
|
113 |
|
114 |
|
115 |
|
116 |
|
117 |
|
118 |
|
119 |
|
120 | suite 'Splats', ->
|
121 |
|
122 | test 'basic splats', ->
|
123 | a = [1, 2, 3]
|
124 | arrayEq [1, 2, 3], [a...]
|
125 | arrayEq [0, 1, 2, 3], [0, a...]
|
126 | arrayEq [1, 2, 3, 4], [a..., 4]
|
127 | arrayEq [1, 2, 3, 1, 2, 3], [a..., a...]
|
128 | arrayEq [1, 2, 3, [1, 2, 3]], [a..., [a]...]
|
129 | arrayEq [[0], 1, 2, 3], [[0], a...]
|
130 | arrayEq [0, 1, 2, 3], [[0]..., a...]
|
131 | b = [1, [2], 3]
|
132 | arrayEq [1, [2], 3], [b...]
|
133 | arrayEq [[0], 1, [2], 3], [[0], b...]
|
134 |
|
135 | test 'splats and member access', ->
|
136 | arr = [0, 1, 2]
|
137 | a = 'a'
|
138 | obj = {a: arr, prototype: {a: arr}}
|
139 | arrayEq arr, [obj.a...]
|
140 | arrayEq arr, [obj::a...]
|
141 | arrayEq arr, [obj[a]...]
|
142 | arrayEq arr, [obj::[a]...]
|
143 | arrayEq arr, [obj?.a...]
|
144 | arrayEq arr, [obj?::a...]
|
145 | arrayEq arr, [obj?[a]...]
|
146 | arrayEq arr, [obj?::[a]...]
|
147 |
|
148 | test 'splats and function invocation', ->
|
149 | arr = [1, 2, 3]
|
150 | fn = -> arr
|
151 | obj = {fn: fn}
|
152 | arrayEq arr, [(do fn)...]
|
153 | arrayEq arr, [fn()...]
|
154 | arrayEq arr, [(fn 0)...]
|
155 | arrayEq arr, [fn(0)...]
|
156 | arrayEq arr, [(do obj.fn)...]
|
157 | arrayEq arr, [obj.fn()...]
|
158 | arrayEq arr, [(obj.fn 0)...]
|
159 | arrayEq arr, [obj.fn(0)...]
|
160 |
|
161 | test 'splats and array-like objects', ->
|
162 | obj = {0: 1, 1: 2, 2: 3, length: 3}
|
163 | fn = ->
|
164 | arrayEq ([].slice.call arguments), [arguments...]
|
165 | arguments
|
166 | arrayEq [1, 2, 3], [obj...]
|
167 | arrayEq [0, 1, 2, 3, 4], [0, obj..., 4]
|
168 | arrayEq [1, 2, 3], [(fn 1, 2, 3)...]
|
169 | arrayEq [0, 1, 2, 3, 4], [0, (fn 1, 2, 3)..., 4]
|
170 |
|
171 | test 'array splat expansions with assignments', ->
|
172 | nums = [1, 2, 3]
|
173 | list = [a = 0, nums..., b = 4]
|
174 | eq 0, a
|
175 | eq 4, b
|
176 | arrayEq [0,1,2,3,4], list
|
177 |
|
178 | test 'array splats with nested arrays', ->
|
179 | nonce = {}
|
180 | a = [nonce]
|
181 | list = [1, 2, a...]
|
182 | eq list[0], 1
|
183 | eq list[2], nonce
|
184 |
|
185 | a = [[nonce]]
|
186 | list = [1, 2, a...]
|
187 | arrayEq list, [1, 2, [nonce]]
|