blob: 93005a617a35763af9d8afadaf1407da94748fbb [file] [log] [blame]
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01001" Tests for the Blob types
2
Christian Brabandteb380b92025-07-07 20:53:55 +02003import './util/vim9.vim' as v9
Bram Moolenaar68452172021-04-12 21:21:02 +02004
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01005func TearDown()
6 " Run garbage collection after every test
7 call test_garbagecollect_now()
8endfunc
9
10" Tests for Blob type
11
12" Blob creation from constant
13func Test_blob_create()
Bram Moolenaar68452172021-04-12 21:21:02 +020014 let lines =<< trim END
15 VAR b = 0zDEADBEEF
16 call assert_equal(v:t_blob, type(b))
17 call assert_equal(4, len(b))
18 call assert_equal(0xDE, b[0])
19 call assert_equal(0xAD, b[1])
20 call assert_equal(0xBE, b[2])
21 call assert_equal(0xEF, b[3])
22 call assert_fails('VAR x = b[4]')
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +010023
Bram Moolenaar68452172021-04-12 21:21:02 +020024 call assert_equal(0xDE, get(b, 0))
25 call assert_equal(0xEF, get(b, 3))
Bram Moolenaarc0f5a782019-01-13 15:16:13 +010026
Bram Moolenaar68452172021-04-12 21:21:02 +020027 call assert_fails('VAR b = 0z1', 'E973:')
28 call assert_fails('VAR b = 0z1x', 'E973:')
29 call assert_fails('VAR b = 0z12345', 'E973:')
Bram Moolenaarc0f5a782019-01-13 15:16:13 +010030
Bram Moolenaar68452172021-04-12 21:21:02 +020031 call assert_equal(0z, test_null_blob())
Bram Moolenaar4131fd52019-01-17 16:32:53 +010032
Bram Moolenaar68452172021-04-12 21:21:02 +020033 LET b = 0z001122.33445566.778899.aabbcc.dd
34 call assert_equal(0z00112233445566778899aabbccdd, b)
35 call assert_fails('VAR b = 0z1.1')
36 call assert_fails('VAR b = 0z.')
37 call assert_fails('VAR b = 0z001122.')
Yegappan Lakshmanan9cb865e2025-03-23 16:42:16 +010038 call assert_fails('call get("", 1)', 'E1531:')
Bram Moolenaar68452172021-04-12 21:21:02 +020039 call assert_equal(0, len(test_null_blob()))
Yegappan Lakshmanan27708e62021-12-26 21:54:43 +000040 call assert_equal(0z, copy(test_null_blob()))
Bram Moolenaar68452172021-04-12 21:21:02 +020041 END
Bram Moolenaar62aec932022-01-29 21:45:34 +000042 call v9.CheckLegacyAndVim9Success(lines)
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +010043endfunc
44
45" assignment to a blob
46func Test_blob_assign()
Bram Moolenaar68452172021-04-12 21:21:02 +020047 let lines =<< trim END
48 VAR b = 0zDEADBEEF
49 VAR b2 = b[1 : 2]
50 call assert_equal(0zADBE, b2)
51
52 VAR bcopy = b[:]
53 call assert_equal(b, bcopy)
54 call assert_false(b is bcopy)
55
56 LET b = 0zDEADBEEF
57 LET b2 = b
58 call assert_true(b is b2)
59 LET b[:] = 0z11223344
60 call assert_equal(0z11223344, b)
61 call assert_equal(0z11223344, b2)
62 call assert_true(b is b2)
63
64 LET b = 0zDEADBEEF
65 LET b[3 :] = 0z66
66 call assert_equal(0zDEADBE66, b)
67 LET b[: 1] = 0z8899
68 call assert_equal(0z8899BE66, b)
69
70 LET b = 0zDEADBEEF
71 LET b += 0z99
72 call assert_equal(0zDEADBEEF99, b)
73
74 VAR l = [0z12]
75 VAR m = deepcopy(l)
76 LET m[0] = 0z34 #" E742 or E741 should not occur.
Yegappan Lakshmananfe424d12024-05-17 18:20:43 +020077
78 VAR blob1 = 0z10
79 LET blob1 += test_null_blob()
80 call assert_equal(0z10, blob1)
81 LET blob1 = test_null_blob()
82 LET blob1 += 0z20
83 call assert_equal(0z20, blob1)
Bram Moolenaar68452172021-04-12 21:21:02 +020084 END
Bram Moolenaar62aec932022-01-29 21:45:34 +000085 call v9.CheckLegacyAndVim9Success(lines)
Bram Moolenaar68452172021-04-12 21:21:02 +020086
Bram Moolenaar0e3ff192021-04-14 20:35:23 +020087 let lines =<< trim END
88 VAR b = 0zDEADBEEF
89 LET b[2 : 3] = 0z112233
90 END
Bram Moolenaar62aec932022-01-29 21:45:34 +000091 call v9.CheckLegacyAndVim9Failure(lines, 'E972:')
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +010092
Bram Moolenaar0e3ff192021-04-14 20:35:23 +020093 let lines =<< trim END
94 VAR b = 0zDEADBEEF
95 LET b[2 : 3] = 0z11
96 END
Bram Moolenaar62aec932022-01-29 21:45:34 +000097 call v9.CheckLegacyAndVim9Failure(lines, 'E972:')
Bram Moolenaar0e3ff192021-04-14 20:35:23 +020098
99 let lines =<< trim END
100 VAR b = 0zDEADBEEF
101 LET b[3 : 2] = 0z
102 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000103 call v9.CheckLegacyAndVim9Failure(lines, 'E979:')
Bram Moolenaar0e3ff192021-04-14 20:35:23 +0200104
105 let lines =<< trim END
106 VAR b = 0zDEADBEEF
Yegappan Lakshmanan9937d8b2024-05-08 20:24:33 +0200107 LET b[0 : 1] = 0x1122
108 END
109 call v9.CheckLegacyAndVim9Failure(lines, ['E709:', 'E1012:', 'E709:'])
110
111 let lines =<< trim END
112 VAR b = 0zDEADBEEF
113 LET b[0] = 0z11
114 END
115 call v9.CheckLegacyAndVim9Failure(lines, ['E974:', 'E974:', 'E1012:'])
116
117 let lines =<< trim END
118 VAR b = 0zDEADBEEF
Bram Moolenaar0e3ff192021-04-14 20:35:23 +0200119 LET b ..= 0z33
120 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000121 call v9.CheckLegacyAndVim9Failure(lines, ['E734:', 'E1019:', 'E734:'])
Bram Moolenaar0e3ff192021-04-14 20:35:23 +0200122
123 let lines =<< trim END
124 VAR b = 0zDEADBEEF
125 LET b ..= "xx"
126 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000127 call v9.CheckLegacyAndVim9Failure(lines, ['E734:', 'E1019:', 'E734:'])
Bram Moolenaar0e3ff192021-04-14 20:35:23 +0200128
129 let lines =<< trim END
130 VAR b = 0zDEADBEEF
131 LET b += "xx"
132 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000133 call v9.CheckLegacyAndVim9Failure(lines, ['E734:', 'E1012:', 'E734:'])
Bram Moolenaar0e3ff192021-04-14 20:35:23 +0200134
135 let lines =<< trim END
136 VAR b = 0zDEADBEEF
137 LET b[1 : 1] ..= 0z55
138 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000139 call v9.CheckLegacyAndVim9Failure(lines, ['E734:', 'E1183:', 'E734:'])
Yegappan Lakshmanan885de442022-04-23 10:51:14 +0100140
141 call assert_fails('let b = readblob("a1b2c3")', 'E484:')
Bram Moolenaarc0f5a782019-01-13 15:16:13 +0100142endfunc
143
144func Test_blob_get_range()
Bram Moolenaar51e93322021-04-17 20:44:56 +0200145 let lines =<< trim END
146 VAR b = 0z0011223344
147 call assert_equal(0z2233, b[2 : 3])
148 call assert_equal(0z223344, b[2 : -1])
149 call assert_equal(0z00, b[0 : -5])
150 call assert_equal(0z, b[0 : -11])
151 call assert_equal(0z44, b[-1 :])
152 call assert_equal(0z0011223344, b[:])
153 call assert_equal(0z0011223344, b[: -1])
154 call assert_equal(0z, b[5 : 6])
155 call assert_equal(0z0011, b[-10 : 1])
156 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000157 call v9.CheckLegacyAndVim9Success(lines)
Bram Moolenaar51e93322021-04-17 20:44:56 +0200158
159 " legacy script white space
Bram Moolenaarc0f5a782019-01-13 15:16:13 +0100160 let b = 0z0011223344
161 call assert_equal(0z2233, b[2:3])
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100162endfunc
163
Bram Moolenaar2ea773b2019-01-15 22:16:42 +0100164func Test_blob_get()
Bram Moolenaar51e93322021-04-17 20:44:56 +0200165 let lines =<< trim END
166 VAR b = 0z0011223344
167 call assert_equal(0x00, get(b, 0))
168 call assert_equal(0x22, get(b, 2, 999))
169 call assert_equal(0x44, get(b, 4))
170 call assert_equal(0x44, get(b, -1))
171 call assert_equal(-1, get(b, 5))
172 call assert_equal(999, get(b, 5, 999))
173 call assert_equal(-1, get(b, -8))
174 call assert_equal(999, get(b, -8, 999))
175 call assert_equal(10, get(test_null_blob(), 2, 10))
Bram Moolenaara5be9b62019-01-24 12:31:44 +0100176
Bram Moolenaar51e93322021-04-17 20:44:56 +0200177 call assert_equal(0x00, b[0])
178 call assert_equal(0x22, b[2])
179 call assert_equal(0x44, b[4])
180 call assert_equal(0x44, b[-1])
181 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000182 call v9.CheckLegacyAndVim9Success(lines)
Bram Moolenaar51e93322021-04-17 20:44:56 +0200183
184 let lines =<< trim END
185 VAR b = 0z0011223344
186 echo b[5]
187 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000188 call v9.CheckLegacyAndVim9Failure(lines, 'E979:')
Bram Moolenaar51e93322021-04-17 20:44:56 +0200189
190 let lines =<< trim END
191 VAR b = 0z0011223344
192 echo b[-8]
193 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000194 call v9.CheckLegacyAndVim9Failure(lines, 'E979:')
Bram Moolenaar2ea773b2019-01-15 22:16:42 +0100195endfunc
196
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100197func Test_blob_to_string()
Bram Moolenaar51e93322021-04-17 20:44:56 +0200198 let lines =<< trim END
199 VAR b = 0z00112233445566778899aabbccdd
200 call assert_equal('0z00112233.44556677.8899AABB.CCDD', string(b))
201 call assert_equal(b, eval(string(b)))
202 call remove(b, 4, -1)
203 call assert_equal('0z00112233', string(b))
204 call remove(b, 0, 3)
205 call assert_equal('0z', string(b))
206 call assert_equal('0z', string(test_null_blob()))
207 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000208 call v9.CheckLegacyAndVim9Success(lines)
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100209endfunc
210
211func Test_blob_compare()
Bram Moolenaar51e93322021-04-17 20:44:56 +0200212 let lines =<< trim END
213 VAR b1 = 0z0011
214 VAR b2 = 0z1100
215 VAR b3 = 0z001122
216 call assert_true(b1 == b1)
217 call assert_false(b1 == b2)
218 call assert_false(b1 == b3)
219 call assert_true(b1 != b2)
220 call assert_true(b1 != b3)
221 call assert_true(b1 == 0z0011)
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100222
Bram Moolenaar51e93322021-04-17 20:44:56 +0200223 call assert_false(b1 is b2)
224 LET b2 = b1
225 call assert_true(b1 == b2)
226 call assert_true(b1 is b2)
227 LET b2 = copy(b1)
228 call assert_true(b1 == b2)
229 call assert_false(b1 is b2)
230 LET b2 = b1[:]
231 call assert_true(b1 == b2)
232 call assert_false(b1 is b2)
233 call assert_true(b1 isnot b2)
Yegappan Lakshmanan885de442022-04-23 10:51:14 +0100234 call assert_true(0z != 0z10)
235 call assert_true(0z10 != 0z)
Bram Moolenaar51e93322021-04-17 20:44:56 +0200236 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000237 call v9.CheckLegacyAndVim9Success(lines)
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100238
Bram Moolenaar51e93322021-04-17 20:44:56 +0200239 let lines =<< trim END
240 VAR b1 = 0z0011
241 echo b1 == 9
242 END
zeertzjq67fe77d2025-04-20 10:21:18 +0200243 call v9.CheckLegacyAndVim9Failure(lines, ['E977:', 'E1072:', 'E1072:'])
Bram Moolenaar51e93322021-04-17 20:44:56 +0200244
245 let lines =<< trim END
246 VAR b1 = 0z0011
247 echo b1 != 9
248 END
zeertzjq67fe77d2025-04-20 10:21:18 +0200249 call v9.CheckLegacyAndVim9Failure(lines, ['E977:', 'E1072:', 'E1072:'])
Bram Moolenaar51e93322021-04-17 20:44:56 +0200250
251 let lines =<< trim END
252 VAR b1 = 0z0011
253 VAR b2 = 0z1100
254 VAR x = b1 > b2
255 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000256 call v9.CheckLegacyAndVim9Failure(lines, ['E978:', 'E1072:', 'E1072:'])
Bram Moolenaar51e93322021-04-17 20:44:56 +0200257
258 let lines =<< trim END
259 VAR b1 = 0z0011
260 VAR b2 = 0z1100
261 VAR x = b1 < b2
262 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000263 call v9.CheckLegacyAndVim9Failure(lines, ['E978:', 'E1072:', 'E1072:'])
Bram Moolenaar51e93322021-04-17 20:44:56 +0200264
265 let lines =<< trim END
266 VAR b1 = 0z0011
267 VAR b2 = 0z1100
268 VAR x = b1 - b2
269 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000270 call v9.CheckLegacyAndVim9Failure(lines, ['E974:', 'E1036:', 'E974:'])
Bram Moolenaar51e93322021-04-17 20:44:56 +0200271
272 let lines =<< trim END
273 VAR b1 = 0z0011
274 VAR b2 = 0z1100
275 VAR x = b1 / b2
276 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000277 call v9.CheckLegacyAndVim9Failure(lines, ['E974:', 'E1036:', 'E974:'])
Bram Moolenaar51e93322021-04-17 20:44:56 +0200278
279 let lines =<< trim END
280 VAR b1 = 0z0011
281 VAR b2 = 0z1100
282 VAR x = b1 * b2
283 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000284 call v9.CheckLegacyAndVim9Failure(lines, ['E974:', 'E1036:', 'E974:'])
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100285endfunc
286
Bram Moolenaar51e93322021-04-17 20:44:56 +0200287func Test_blob_index_assign()
288 let lines =<< trim END
289 VAR b = 0z00
290 LET b[1] = 0x11
291 LET b[2] = 0x22
Yegappan Lakshmanan885de442022-04-23 10:51:14 +0100292 LET b[0] = 0x33
293 call assert_equal(0z331122, b)
Bram Moolenaar51e93322021-04-17 20:44:56 +0200294 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000295 call v9.CheckLegacyAndVim9Success(lines)
Bram Moolenaar51e93322021-04-17 20:44:56 +0200296
297 let lines =<< trim END
298 VAR b = 0z00
299 LET b[2] = 0x33
300 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000301 call v9.CheckLegacyAndVim9Failure(lines, 'E979:')
Bram Moolenaar51e93322021-04-17 20:44:56 +0200302
303 let lines =<< trim END
304 VAR b = 0z00
305 LET b[-2] = 0x33
306 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000307 call v9.CheckLegacyAndVim9Failure(lines, 'E979:')
Yegappan Lakshmanan885de442022-04-23 10:51:14 +0100308
309 let lines =<< trim END
310 VAR b = 0z00010203
311 LET b[0 : -1] = 0z33
312 END
313 call v9.CheckLegacyAndVim9Failure(lines, 'E979:')
314
315 let lines =<< trim END
316 VAR b = 0z00010203
317 LET b[3 : 4] = 0z3344
318 END
319 call v9.CheckLegacyAndVim9Failure(lines, 'E979:')
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100320endfunc
321
322func Test_blob_for_loop()
Bram Moolenaard551d6c2021-04-18 13:15:58 +0200323 let lines =<< trim END
324 VAR blob = 0z00010203
325 VAR i = 0
326 for byte in blob
327 call assert_equal(i, byte)
328 LET i += 1
329 endfor
330 call assert_equal(4, i)
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100331
Bram Moolenaard551d6c2021-04-18 13:15:58 +0200332 LET blob = 0z00
Bram Moolenaardd29ea12019-01-23 21:56:21 +0100333 call remove(blob, 0)
Bram Moolenaard551d6c2021-04-18 13:15:58 +0200334 call assert_equal(0, len(blob))
335 for byte in blob
336 call assert_report('loop over empty blob')
337 endfor
338
339 LET blob = 0z0001020304
340 LET i = 0
341 for byte in blob
342 call assert_equal(i, byte)
343 if i == 1
344 call remove(blob, 0)
345 elseif i == 3
346 call remove(blob, 3)
347 endif
348 LET i += 1
349 endfor
350 call assert_equal(5, i)
351 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000352 call v9.CheckLegacyAndVim9Success(lines)
Yegappan Lakshmananfe424d12024-05-17 18:20:43 +0200353
354 " Test for skipping the loop var assignment in a for loop
355 let lines =<< trim END
356 VAR blob = 0z998877
357 VAR c = 0
358 for _ in blob
359 LET c += 1
360 endfor
361 call assert_equal(3, c)
362 END
363 call v9.CheckLegacyAndVim9Success(lines)
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100364endfunc
365
366func Test_blob_concatenate()
Bram Moolenaarb7c21af2021-04-18 14:12:31 +0200367 let lines =<< trim END
368 VAR b = 0z0011
369 LET b += 0z2233
370 call assert_equal(0z00112233, b)
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100371
Bram Moolenaarb7c21af2021-04-18 14:12:31 +0200372 LET b = 0zDEAD + 0zBEEF
373 call assert_equal(0zDEADBEEF, b)
374 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000375 call v9.CheckLegacyAndVim9Success(lines)
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100376
Bram Moolenaarb7c21af2021-04-18 14:12:31 +0200377 let lines =<< trim END
378 VAR b = 0z0011
379 LET b += "a"
380 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000381 call v9.CheckLegacyAndVim9Failure(lines, ['E734:', 'E1012:', 'E734:'])
Bram Moolenaarb7c21af2021-04-18 14:12:31 +0200382
383 let lines =<< trim END
384 VAR b = 0z0011
385 LET b += 88
386 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000387 call v9.CheckLegacyAndVim9Failure(lines, ['E734:', 'E1012:', 'E734:'])
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100388endfunc
389
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100390func Test_blob_add()
Bram Moolenaarb7c21af2021-04-18 14:12:31 +0200391 let lines =<< trim END
392 VAR b = 0z0011
393 call add(b, 0x22)
394 call assert_equal(0z001122, b)
395 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000396 call v9.CheckLegacyAndVim9Success(lines)
Bram Moolenaarb7c21af2021-04-18 14:12:31 +0200397
398 " Only works in legacy script
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100399 let b = 0z0011
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100400 call add(b, '51')
Bram Moolenaarb7c21af2021-04-18 14:12:31 +0200401 call assert_equal(0z001133, b)
Bram Moolenaarea04a6e2020-04-23 13:38:02 +0200402 call assert_equal(1, add(test_null_blob(), 0x22))
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100403
Bram Moolenaarb7c21af2021-04-18 14:12:31 +0200404 let lines =<< trim END
405 VAR b = 0z0011
406 call add(b, [9])
407 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000408 call v9.CheckLegacyAndVim9Failure(lines, ['E745:', 'E1012:', 'E1210:'])
Bram Moolenaarb7c21af2021-04-18 14:12:31 +0200409
410 let lines =<< trim END
411 VAR b = 0z0011
412 call add("", 0x01)
413 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000414 call v9.CheckLegacyAndVim9Failure(lines, ['E897:', 'E1013:', 'E1226:'])
Bram Moolenaarb7c21af2021-04-18 14:12:31 +0200415
416 let lines =<< trim END
417 add(test_null_blob(), 0x22)
418 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000419 call v9.CheckDefExecAndScriptFailure(lines, 'E1131:')
Yegappan Lakshmanan27708e62021-12-26 21:54:43 +0000420
421 let lines =<< trim END
422 let b = 0zDEADBEEF
423 lockvar b
424 call add(b, 0)
425 unlockvar b
426 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000427 call v9.CheckScriptFailure(lines, 'E741:')
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100428endfunc
429
430func Test_blob_empty()
431 call assert_false(empty(0z001122))
432 call assert_true(empty(0z))
433 call assert_true(empty(test_null_blob()))
434endfunc
435
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100436" Test removing items in blob
437func Test_blob_func_remove()
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200438 let lines =<< trim END
439 #" Test removing 1 element
440 VAR b = 0zDEADBEEF
441 call assert_equal(0xDE, remove(b, 0))
442 call assert_equal(0zADBEEF, b)
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100443
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200444 LET b = 0zDEADBEEF
445 call assert_equal(0xEF, remove(b, -1))
446 call assert_equal(0zDEADBE, b)
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100447
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200448 LET b = 0zDEADBEEF
449 call assert_equal(0xAD, remove(b, 1))
450 call assert_equal(0zDEBEEF, b)
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100451
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200452 #" Test removing range of element(s)
453 LET b = 0zDEADBEEF
454 call assert_equal(0zBE, remove(b, 2, 2))
455 call assert_equal(0zDEADEF, b)
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100456
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200457 LET b = 0zDEADBEEF
458 call assert_equal(0zADBE, remove(b, 1, 2))
459 call assert_equal(0zDEEF, b)
460 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000461 call v9.CheckLegacyAndVim9Success(lines)
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100462
463 " Test invalid cases
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200464 let lines =<< trim END
465 VAR b = 0zDEADBEEF
466 call remove(b, 5)
467 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000468 call v9.CheckLegacyAndVim9Failure(lines, 'E979:')
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200469
470 let lines =<< trim END
471 VAR b = 0zDEADBEEF
472 call remove(b, 1, 5)
473 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000474 call v9.CheckLegacyAndVim9Failure(lines, 'E979:')
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200475
476 let lines =<< trim END
477 VAR b = 0zDEADBEEF
Yegappan Lakshmanan885de442022-04-23 10:51:14 +0100478 call remove(b, -10)
479 END
480 call v9.CheckLegacyAndVim9Failure(lines, 'E979:')
481
482 let lines =<< trim END
483 VAR b = 0zDEADBEEF
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200484 call remove(b, 3, 2)
485 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000486 call v9.CheckLegacyAndVim9Failure(lines, 'E979:')
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200487
488 let lines =<< trim END
489 VAR b = 0zDEADBEEF
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200490 call remove(test_null_blob(), 1, 2)
491 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000492 call v9.CheckLegacyAndVim9Failure(lines, 'E979:')
Sean Dewar80d73952021-08-04 19:25:54 +0200493
494 let lines =<< trim END
495 let b = 0zDEADBEEF
496 lockvar b
497 call remove(b, 0)
498 unlockvar b
499 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000500 call v9.CheckScriptFailure(lines, 'E741:')
Sean Dewar80d73952021-08-04 19:25:54 +0200501
502 " can only check at script level, not in a :def function
503 let lines =<< trim END
504 vim9script
505 var b = 0zDEADBEEF
506 lockvar b
507 remove(b, 0)
508 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000509 call v9.CheckScriptFailure(lines, 'E741:')
Yegappan Lakshmanan27708e62021-12-26 21:54:43 +0000510
511 call assert_fails('echo remove(0z1020, [])', 'E745:')
512 call assert_fails('echo remove(0z1020, 0, [])', 'E745:')
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100513endfunc
514
515func Test_blob_read_write()
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200516 let lines =<< trim END
517 VAR b = 0zDEADBEEF
518 call writefile(b, 'Xblob')
519 VAR br = readfile('Xblob', 'B')
520 call assert_equal(b, br)
K.Takata11df3ae2022-10-19 14:02:40 +0100521 VAR br2 = readblob('Xblob')
522 call assert_equal(b, br2)
523 VAR br3 = readblob('Xblob', 1)
524 call assert_equal(b[1 :], br3)
525 VAR br4 = readblob('Xblob', 1, 2)
526 call assert_equal(b[1 : 2], br4)
527 VAR br5 = readblob('Xblob', -3)
528 call assert_equal(b[-3 :], br5)
529 VAR br6 = readblob('Xblob', -3, 2)
530 call assert_equal(b[-3 : -2], br6)
Bram Moolenaar94722c52023-01-28 19:19:03 +0000531
Bram Moolenaar5b2a3d72022-10-21 11:25:30 +0100532 #" reading past end of file, empty result
K.Takata11df3ae2022-10-19 14:02:40 +0100533 VAR br1e = readblob('Xblob', 10000)
534 call assert_equal(0z, br1e)
Bram Moolenaar5b2a3d72022-10-21 11:25:30 +0100535
536 #" reading too much, result is truncated
537 VAR blong = readblob('Xblob', -1000)
538 call assert_equal(b, blong)
539 LET blong = readblob('Xblob', -10, 8)
540 call assert_equal(b, blong)
541 LET blong = readblob('Xblob', 0, 10)
542 call assert_equal(b, blong)
K.Takata11df3ae2022-10-19 14:02:40 +0100543
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200544 call delete('Xblob')
545 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000546 call v9.CheckLegacyAndVim9Success(lines)
Bram Moolenaar15352dc2020-04-06 21:12:42 +0200547
K.Takata43625762022-10-20 13:28:51 +0100548 if filereadable('/dev/random')
549 let b = readblob('/dev/random', 0, 10)
550 call assert_equal(10, len(b))
551 endif
552
K.Takata11df3ae2022-10-19 14:02:40 +0100553 call assert_fails("call readblob('notexist')", 'E484:')
554 " TODO: How do we test for the E485 error?
555
Bram Moolenaar15352dc2020-04-06 21:12:42 +0200556 " This was crashing when calling readfile() with a directory.
557 call assert_fails("call readfile('.', 'B')", 'E17: "." is a directory')
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100558endfunc
559
560" filter() item in blob
561func Test_blob_filter()
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200562 let lines =<< trim END
563 call assert_equal(test_null_blob(), filter(test_null_blob(), '0'))
564 call assert_equal(0z, filter(0zDEADBEEF, '0'))
565 call assert_equal(0zADBEEF, filter(0zDEADBEEF, 'v:val != 0xDE'))
566 call assert_equal(0zDEADEF, filter(0zDEADBEEF, 'v:val != 0xBE'))
567 call assert_equal(0zDEADBE, filter(0zDEADBEEF, 'v:val != 0xEF'))
568 call assert_equal(0zDEADBEEF, filter(0zDEADBEEF, '1'))
569 call assert_equal(0z01030103, filter(0z010203010203, 'v:val != 0x02'))
570 call assert_equal(0zADEF, filter(0zDEADBEEF, 'v:key % 2'))
571 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000572 call v9.CheckLegacyAndVim9Success(lines)
Yegappan Lakshmanan27708e62021-12-26 21:54:43 +0000573 call assert_fails('echo filter(0z10, "a10")', 'E121:')
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100574endfunc
575
576" map() item in blob
577func Test_blob_map()
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200578 let lines =<< trim END
579 call assert_equal(0zDFAEBFF0, map(0zDEADBEEF, 'v:val + 1'))
580 call assert_equal(0z00010203, map(0zDEADBEEF, 'v:key'))
581 call assert_equal(0zDEAEC0F2, map(0zDEADBEEF, 'v:key + v:val'))
582 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000583 call v9.CheckLegacyAndVim9Success(lines)
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100584
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200585 let lines =<< trim END
586 call map(0z00, '[9]')
587 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000588 call v9.CheckLegacyAndVim9Failure(lines, 'E978:')
Yegappan Lakshmanan27708e62021-12-26 21:54:43 +0000589 call assert_fails('echo map(0z10, "a10")', 'E121:')
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100590endfunc
591
592func Test_blob_index()
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200593 let lines =<< trim END
594 call assert_equal(2, index(0zDEADBEEF, 0xBE))
595 call assert_equal(-1, index(0zDEADBEEF, 0))
596 call assert_equal(2, index(0z11111111, 0x11, 2))
597 call assert_equal(3, 0z11110111->index(0x11, 2))
598 call assert_equal(2, index(0z11111111, 0x11, -2))
599 call assert_equal(3, index(0z11110111, 0x11, -2))
600 call assert_equal(0, index(0z11110111, 0x11, -10))
601 call assert_equal(-1, index(test_null_blob(), 1))
602 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000603 call v9.CheckLegacyAndVim9Success(lines)
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100604endfunc
605
606func Test_blob_insert()
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200607 let lines =<< trim END
608 VAR b = 0zDEADBEEF
609 call insert(b, 0x33)
610 call assert_equal(0z33DEADBEEF, b)
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100611
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200612 LET b = 0zDEADBEEF
613 call insert(b, 0x33, 2)
614 call assert_equal(0zDEAD33BEEF, b)
615 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000616 call v9.CheckLegacyAndVim9Success(lines)
Bram Moolenaar05500ec2019-01-13 19:10:33 +0100617
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200618 " only works in legacy script
Bram Moolenaar92b83cc2020-04-25 15:24:44 +0200619 call assert_equal(0, insert(test_null_blob(), 0x33))
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200620
621 let lines =<< trim END
622 VAR b = 0zDEADBEEF
623 call insert(b, -1)
624 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000625 call v9.CheckLegacyAndVim9Failure(lines, 'E475:')
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200626
627 let lines =<< trim END
628 VAR b = 0zDEADBEEF
629 call insert(b, 257)
630 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000631 call v9.CheckLegacyAndVim9Failure(lines, 'E475:')
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200632
633 let lines =<< trim END
634 VAR b = 0zDEADBEEF
635 call insert(b, 0, [9])
636 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000637 call v9.CheckLegacyAndVim9Failure(lines, ['E745:', 'E1013:', 'E1210:'])
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200638
639 let lines =<< trim END
640 VAR b = 0zDEADBEEF
641 call insert(b, 0, -20)
642 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000643 call v9.CheckLegacyAndVim9Failure(lines, 'E475:')
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200644
645 let lines =<< trim END
646 VAR b = 0zDEADBEEF
647 call insert(b, 0, 20)
648 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000649 call v9.CheckLegacyAndVim9Failure(lines, 'E475:')
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200650
651 let lines =<< trim END
652 VAR b = 0zDEADBEEF
653 call insert(b, [])
654 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000655 call v9.CheckLegacyAndVim9Failure(lines, ['E745:', 'E1013:', 'E1210:'])
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200656
657 let lines =<< trim END
658 insert(test_null_blob(), 0x33)
659 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000660 call v9.CheckDefExecAndScriptFailure(lines, 'E1131:')
Sean Dewar80d73952021-08-04 19:25:54 +0200661
662 let lines =<< trim END
663 let b = 0zDEADBEEF
664 lockvar b
665 call insert(b, 3)
666 unlockvar b
667 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000668 call v9.CheckScriptFailure(lines, 'E741:')
Sean Dewar80d73952021-08-04 19:25:54 +0200669
670 let lines =<< trim END
671 vim9script
672 var b = 0zDEADBEEF
673 lockvar b
674 insert(b, 3)
675 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000676 call v9.CheckScriptFailure(lines, 'E741:')
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100677endfunc
678
679func Test_blob_reverse()
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200680 let lines =<< trim END
681 call assert_equal(0zEFBEADDE, reverse(0zDEADBEEF))
682 call assert_equal(0zBEADDE, reverse(0zDEADBE))
683 call assert_equal(0zADDE, reverse(0zDEAD))
684 call assert_equal(0zDE, reverse(0zDE))
685 call assert_equal(0z, reverse(test_null_blob()))
686 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000687 call v9.CheckLegacyAndVim9Success(lines)
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100688endfunc
689
690func Test_blob_json_encode()
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200691 let lines =<< trim END
692 call assert_equal('[222,173,190,239]', json_encode(0zDEADBEEF))
693 call assert_equal('[]', json_encode(0z))
694 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000695 call v9.CheckLegacyAndVim9Success(lines)
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100696endfunc
Bram Moolenaarc0f5a782019-01-13 15:16:13 +0100697
698func Test_blob_lock()
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200699 let lines =<< trim END
700 let b = 0z112233
701 lockvar b
702 unlockvar b
703 let b = 0z44
704 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000705 call v9.CheckScriptSuccess(lines)
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200706
707 let lines =<< trim END
708 vim9script
709 var b = 0z112233
710 lockvar b
711 unlockvar b
712 b = 0z44
713 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000714 call v9.CheckScriptSuccess(lines)
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200715
716 let lines =<< trim END
717 let b = 0z112233
718 lockvar b
719 let b = 0z44
720 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000721 call v9.CheckScriptFailure(lines, 'E741:')
Bram Moolenaar39211cb2021-04-18 15:48:04 +0200722
723 let lines =<< trim END
724 vim9script
725 var b = 0z112233
726 lockvar b
727 b = 0z44
728 END
Bram Moolenaar62aec932022-01-29 21:45:34 +0000729 call v9.CheckScriptFailure(lines, 'E741:')
Bram Moolenaarc0f5a782019-01-13 15:16:13 +0100730endfunc
731
732func Test_blob_sort()
Bram Moolenaar73e28dc2022-09-17 21:08:33 +0100733 call v9.CheckLegacyAndVim9Failure(['call sort([1.0, 0z11], "f")'], 'E975:')
Bram Moolenaar62aec932022-01-29 21:45:34 +0000734 call v9.CheckLegacyAndVim9Failure(['call sort([11, 0z11], "N")'], 'E974:')
Bram Moolenaarc0f5a782019-01-13 15:16:13 +0100735endfunc
Bram Moolenaar0e05de42020-03-25 22:23:46 +0100736
Yegappan Lakshmanan5dfe4672021-09-14 17:54:30 +0200737" Tests for the blob2list() function
738func Test_blob2list()
739 call assert_fails('let v = blob2list(10)', 'E1238: Blob required for argument 1')
740 eval 0zFFFF->blob2list()->assert_equal([255, 255])
741 let tests = [[0z0102, [1, 2]],
742 \ [0z00, [0]],
743 \ [0z, []],
744 \ [0z00000000, [0, 0, 0, 0]],
745 \ [0zAABB.CCDD, [170, 187, 204, 221]]]
746 for t in tests
747 call assert_equal(t[0]->blob2list(), t[1])
748 endfor
749 exe 'let v = 0z' .. repeat('000102030405060708090A0B0C0D0E0F', 64)
750 call assert_equal(1024, blob2list(v)->len())
751 call assert_equal([4, 8, 15], [v[100], v[1000], v[1023]])
752 call assert_equal([], blob2list(test_null_blob()))
753endfunc
754
755" Tests for the list2blob() function
756func Test_list2blob()
757 call assert_fails('let b = list2blob(0z10)', 'E1211: List required for argument 1')
758 let tests = [[[1, 2], 0z0102],
759 \ [[0], 0z00],
760 \ [[], 0z],
761 \ [[0, 0, 0, 0], 0z00000000],
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +0200762 \ [[255, 255], 0zFFFF],
Yegappan Lakshmanan5dfe4672021-09-14 17:54:30 +0200763 \ [[170, 187, 204, 221], 0zAABB.CCDD],
764 \ ]
765 for t in tests
Yegappan Lakshmanan820d5522021-09-17 21:07:35 +0200766 call assert_equal(t[1], t[0]->list2blob())
Yegappan Lakshmanan5dfe4672021-09-14 17:54:30 +0200767 endfor
768 call assert_fails('let b = list2blob([1, []])', 'E745:')
769 call assert_fails('let b = list2blob([-1])', 'E1239:')
770 call assert_fails('let b = list2blob([256])', 'E1239:')
771 let b = range(16)->repeat(64)->list2blob()
772 call assert_equal(1024, b->len())
773 call assert_equal([4, 8, 15], [b[100], b[1000], b[1023]])
kuuote04b7b4b2021-12-03 13:57:00 +0000774
Yegappan Lakshmanan5dfe4672021-09-14 17:54:30 +0200775 call assert_equal(0z, list2blob(test_null_list()))
kuuote04b7b4b2021-12-03 13:57:00 +0000776 call assert_equal(0z00010203, list2blob(range(4)))
Yegappan Lakshmanan5dfe4672021-09-14 17:54:30 +0200777endfunc
778
Yegappan Lakshmananbc404bf2021-12-19 19:19:31 +0000779" The following used to cause an out-of-bounds memory access
780func Test_blob2string()
781 let v = '0z' .. repeat('01010101.', 444)
782 let v ..= '01'
783 exe 'let b = ' .. v
784 call assert_equal(v, string(b))
785endfunc
kuuote04b7b4b2021-12-03 13:57:00 +0000786
Bakudankun375141e2022-09-09 18:46:47 +0100787func Test_blob_repeat()
788 call assert_equal(0z, repeat(0z00, 0))
Yegappan Lakshmanan9cb865e2025-03-23 16:42:16 +0100789 call assert_equal(0z, repeat(0z, 1))
Bakudankun375141e2022-09-09 18:46:47 +0100790 call assert_equal(0z00, repeat(0z00, 1))
791 call assert_equal(0z0000, repeat(0z00, 2))
792 call assert_equal(0z00000000, repeat(0z0000, 2))
793
794 call assert_equal(0z, repeat(0z12, 0))
795 call assert_equal(0z, repeat(0z1234, 0))
796 call assert_equal(0z1234, repeat(0z1234, 1))
797 call assert_equal(0z12341234, repeat(0z1234, 2))
798endfunc
799
Yegappan Lakshmanan72bb47e2022-04-03 11:22:38 +0100800" Test for blob allocation failure
801func Test_blob_alloc_failure()
802 " blob variable
803 call test_alloc_fail(GetAllocId('blob_alloc'), 0, 0)
804 call assert_fails('let v = 0z10', 'E342:')
805
806 " blob slice
807 let v = 0z1020
808 call test_alloc_fail(GetAllocId('blob_alloc'), 0, 0)
809 call assert_fails('let x = v[0:0]', 'E342:')
810 call assert_equal(0z1020, x)
811
812 " blob remove()
813 let v = 0z10203040
814 call test_alloc_fail(GetAllocId('blob_alloc'), 0, 0)
815 call assert_fails('let x = remove(v, 1, 2)', 'E342:')
816 call assert_equal(0, x)
817
818 " list2blob()
819 call test_alloc_fail(GetAllocId('blob_alloc'), 0, 0)
820 call assert_fails('let a = list2blob([1, 2, 4])', 'E342:')
821 call assert_equal(0, a)
822
823 " mapnew()
824 call test_alloc_fail(GetAllocId('blob_alloc'), 0, 0)
825 call assert_fails('let x = mapnew(0z1234, {_, v -> 1})', 'E342:')
826 call assert_equal(0, x)
827
828 " copy()
829 call test_alloc_fail(GetAllocId('blob_alloc'), 0, 0)
830 call assert_fails('let x = copy(v)', 'E342:')
831 call assert_equal(0z, x)
832
833 " readblob()
834 call test_alloc_fail(GetAllocId('blob_alloc'), 0, 0)
835 call assert_fails('let x = readblob("test_blob.vim")', 'E342:')
836 call assert_equal(0, x)
837endfunc
838
Yegappan Lakshmananb2186552022-08-13 13:09:20 +0100839" Test for the indexof() function
840func Test_indexof()
841 let b = 0zdeadbeef
842 call assert_equal(0, indexof(b, {i, v -> v == 0xde}))
843 call assert_equal(3, indexof(b, {i, v -> v == 0xef}))
844 call assert_equal(-1, indexof(b, {i, v -> v == 0x1}))
845 call assert_equal(1, indexof(b, "v:val == 0xad"))
846 call assert_equal(-1, indexof(b, "v:val == 0xff"))
Yegappan Lakshmanan63acae12022-08-14 12:07:11 +0100847 call assert_equal(-1, indexof(b, {_, v -> "v == 0xad"}))
Yegappan Lakshmananb2186552022-08-13 13:09:20 +0100848
849 call assert_equal(-1, indexof(0z, "v:val == 0x0"))
850 call assert_equal(-1, indexof(test_null_blob(), "v:val == 0xde"))
851 call assert_equal(-1, indexof(b, test_null_string()))
852 call assert_equal(-1, indexof(b, test_null_function()))
Yegappan Lakshmananfe424d12024-05-17 18:20:43 +0200853 call assert_equal(-1, indexof(b, ""))
Yegappan Lakshmananb2186552022-08-13 13:09:20 +0100854
855 let b = 0z01020102
856 call assert_equal(1, indexof(b, "v:val == 0x02", #{startidx: 0}))
857 call assert_equal(2, indexof(b, "v:val == 0x01", #{startidx: -2}))
858 call assert_equal(-1, indexof(b, "v:val == 0x01", #{startidx: 5}))
859 call assert_equal(0, indexof(b, "v:val == 0x01", #{startidx: -5}))
860 call assert_equal(0, indexof(b, "v:val == 0x01", test_null_dict()))
861
862 " failure cases
863 call assert_fails('let i = indexof(b, "val == 0xde")', 'E121:')
864 call assert_fails('let i = indexof(b, {})', 'E1256:')
Yegappan Lakshmananfe424d12024-05-17 18:20:43 +0200865 call assert_fails('let i = indexof(b, " ")', 'E15:')
Yegappan Lakshmananb2186552022-08-13 13:09:20 +0100866endfunc
867
Bram Moolenaar0e05de42020-03-25 22:23:46 +0100868" vim: shiftwidth=2 sts=2 expandtab