xref: /vim-8.2.3635/src/testdir/test_blob.vim (revision 820d5525)
16e5ea8d2SBram Moolenaar" Tests for the Blob types
26e5ea8d2SBram Moolenaar
368452177SBram Moolenaarsource vim9.vim
468452177SBram Moolenaar
56e5ea8d2SBram Moolenaarfunc TearDown()
66e5ea8d2SBram Moolenaar  " Run garbage collection after every test
76e5ea8d2SBram Moolenaar  call test_garbagecollect_now()
86e5ea8d2SBram Moolenaarendfunc
96e5ea8d2SBram Moolenaar
106e5ea8d2SBram Moolenaar" Tests for Blob type
116e5ea8d2SBram Moolenaar
126e5ea8d2SBram Moolenaar" Blob creation from constant
136e5ea8d2SBram Moolenaarfunc Test_blob_create()
1468452177SBram Moolenaar  let lines =<< trim END
1568452177SBram Moolenaar      VAR b = 0zDEADBEEF
166e5ea8d2SBram Moolenaar      call assert_equal(v:t_blob, type(b))
176e5ea8d2SBram Moolenaar      call assert_equal(4, len(b))
186e5ea8d2SBram Moolenaar      call assert_equal(0xDE, b[0])
196e5ea8d2SBram Moolenaar      call assert_equal(0xAD, b[1])
206e5ea8d2SBram Moolenaar      call assert_equal(0xBE, b[2])
216e5ea8d2SBram Moolenaar      call assert_equal(0xEF, b[3])
2268452177SBram Moolenaar      call assert_fails('VAR x = b[4]')
236e5ea8d2SBram Moolenaar
246e5ea8d2SBram Moolenaar      call assert_equal(0xDE, get(b, 0))
256e5ea8d2SBram Moolenaar      call assert_equal(0xEF, get(b, 3))
26c0f5a78cSBram Moolenaar
2768452177SBram Moolenaar      call assert_fails('VAR b = 0z1', 'E973:')
2868452177SBram Moolenaar      call assert_fails('VAR b = 0z1x', 'E973:')
2968452177SBram Moolenaar      call assert_fails('VAR b = 0z12345', 'E973:')
30c0f5a78cSBram Moolenaar
31c0f5a78cSBram Moolenaar      call assert_equal(0z, test_null_blob())
324131fd55SBram Moolenaar
3368452177SBram Moolenaar      LET b = 0z001122.33445566.778899.aabbcc.dd
344131fd55SBram Moolenaar      call assert_equal(0z00112233445566778899aabbccdd, b)
3568452177SBram Moolenaar      call assert_fails('VAR b = 0z1.1')
3668452177SBram Moolenaar      call assert_fails('VAR b = 0z.')
3768452177SBram Moolenaar      call assert_fails('VAR b = 0z001122.')
380d17f0d1SBram Moolenaar      call assert_fails('call get("", 1)', 'E896:')
3992b83ccfSBram Moolenaar      call assert_equal(0, len(test_null_blob()))
4068452177SBram Moolenaar  END
4168452177SBram Moolenaar  call CheckLegacyAndVim9Success(lines)
426e5ea8d2SBram Moolenaarendfunc
436e5ea8d2SBram Moolenaar
446e5ea8d2SBram Moolenaar" assignment to a blob
456e5ea8d2SBram Moolenaarfunc Test_blob_assign()
4668452177SBram Moolenaar  let lines =<< trim END
4768452177SBram Moolenaar      VAR b = 0zDEADBEEF
4868452177SBram Moolenaar      VAR b2 = b[1 : 2]
496e5ea8d2SBram Moolenaar      call assert_equal(0zADBE, b2)
506e5ea8d2SBram Moolenaar
5168452177SBram Moolenaar      VAR bcopy = b[:]
526e5ea8d2SBram Moolenaar      call assert_equal(b, bcopy)
536e5ea8d2SBram Moolenaar      call assert_false(b is bcopy)
54c0f5a78cSBram Moolenaar
5568452177SBram Moolenaar      LET b = 0zDEADBEEF
5668452177SBram Moolenaar      LET b2 = b
57c0f5a78cSBram Moolenaar      call assert_true(b is b2)
5868452177SBram Moolenaar      LET b[:] = 0z11223344
59c0f5a78cSBram Moolenaar      call assert_equal(0z11223344, b)
60c0f5a78cSBram Moolenaar      call assert_equal(0z11223344, b2)
61c0f5a78cSBram Moolenaar      call assert_true(b is b2)
62c0f5a78cSBram Moolenaar
6368452177SBram Moolenaar      LET b = 0zDEADBEEF
6468452177SBram Moolenaar      LET b[3 :] = 0z66
65c0f5a78cSBram Moolenaar      call assert_equal(0zDEADBE66, b)
6668452177SBram Moolenaar      LET b[: 1] = 0z8899
67c0f5a78cSBram Moolenaar      call assert_equal(0z8899BE66, b)
68c0f5a78cSBram Moolenaar
6968452177SBram Moolenaar      LET b = 0zDEADBEEF
7068452177SBram Moolenaar      LET b += 0z99
7168452177SBram Moolenaar      call assert_equal(0zDEADBEEF99, b)
7268452177SBram Moolenaar
7368452177SBram Moolenaar      VAR l = [0z12]
7468452177SBram Moolenaar      VAR m = deepcopy(l)
7568452177SBram Moolenaar      LET m[0] = 0z34	#" E742 or E741 should not occur.
7668452177SBram Moolenaar  END
7768452177SBram Moolenaar  call CheckLegacyAndVim9Success(lines)
7868452177SBram Moolenaar
790e3ff191SBram Moolenaar  let lines =<< trim END
800e3ff191SBram Moolenaar      VAR b = 0zDEADBEEF
810e3ff191SBram Moolenaar      LET b[2 : 3] = 0z112233
820e3ff191SBram Moolenaar  END
830e3ff191SBram Moolenaar  call CheckLegacyAndVim9Failure(lines, 'E972:')
84c0f5a78cSBram Moolenaar
850e3ff191SBram Moolenaar  let lines =<< trim END
860e3ff191SBram Moolenaar      VAR b = 0zDEADBEEF
870e3ff191SBram Moolenaar      LET b[2 : 3] = 0z11
880e3ff191SBram Moolenaar  END
890e3ff191SBram Moolenaar  call CheckLegacyAndVim9Failure(lines, 'E972:')
900e3ff191SBram Moolenaar
910e3ff191SBram Moolenaar  let lines =<< trim END
920e3ff191SBram Moolenaar      VAR b = 0zDEADBEEF
930e3ff191SBram Moolenaar      LET b[3 : 2] = 0z
940e3ff191SBram Moolenaar  END
950e3ff191SBram Moolenaar  call CheckLegacyAndVim9Failure(lines, 'E979:')
960e3ff191SBram Moolenaar
970e3ff191SBram Moolenaar  let lines =<< trim END
980e3ff191SBram Moolenaar      VAR b = 0zDEADBEEF
990e3ff191SBram Moolenaar      LET b ..= 0z33
1000e3ff191SBram Moolenaar  END
1010e3ff191SBram Moolenaar  call CheckLegacyAndVim9Failure(lines, ['E734:', 'E1019:', 'E734:'])
1020e3ff191SBram Moolenaar
1030e3ff191SBram Moolenaar  let lines =<< trim END
1040e3ff191SBram Moolenaar      VAR b = 0zDEADBEEF
1050e3ff191SBram Moolenaar      LET b ..= "xx"
1060e3ff191SBram Moolenaar  END
1070e3ff191SBram Moolenaar  call CheckLegacyAndVim9Failure(lines, ['E734:', 'E1019:', 'E734:'])
1080e3ff191SBram Moolenaar
1090e3ff191SBram Moolenaar  let lines =<< trim END
1100e3ff191SBram Moolenaar      VAR b = 0zDEADBEEF
1110e3ff191SBram Moolenaar      LET b += "xx"
1120e3ff191SBram Moolenaar  END
1130e3ff191SBram Moolenaar  call CheckLegacyAndVim9Failure(lines, ['E734:', 'E1012:', 'E734:'])
1140e3ff191SBram Moolenaar
1150e3ff191SBram Moolenaar  let lines =<< trim END
1160e3ff191SBram Moolenaar      VAR b = 0zDEADBEEF
1170e3ff191SBram Moolenaar      LET b[1 : 1] ..= 0z55
1180e3ff191SBram Moolenaar  END
1190e3ff191SBram Moolenaar  call CheckLegacyAndVim9Failure(lines, ['E734:', 'E1183:', 'E734:'])
120c0f5a78cSBram Moolenaarendfunc
121c0f5a78cSBram Moolenaar
122c0f5a78cSBram Moolenaarfunc Test_blob_get_range()
12351e93326SBram Moolenaar  let lines =<< trim END
12451e93326SBram Moolenaar      VAR b = 0z0011223344
125c0f5a78cSBram Moolenaar      call assert_equal(0z2233, b[2 : 3])
126c0f5a78cSBram Moolenaar      call assert_equal(0z223344, b[2 : -1])
127c0f5a78cSBram Moolenaar      call assert_equal(0z00, b[0 : -5])
128c0f5a78cSBram Moolenaar      call assert_equal(0z, b[0 : -11])
129c0f5a78cSBram Moolenaar      call assert_equal(0z44, b[-1 :])
130c0f5a78cSBram Moolenaar      call assert_equal(0z0011223344, b[:])
131c0f5a78cSBram Moolenaar      call assert_equal(0z0011223344, b[: -1])
132c0f5a78cSBram Moolenaar      call assert_equal(0z, b[5 : 6])
1338b633135SBram Moolenaar      call assert_equal(0z0011, b[-10 : 1])
13451e93326SBram Moolenaar  END
13551e93326SBram Moolenaar  call CheckLegacyAndVim9Success(lines)
13651e93326SBram Moolenaar
13751e93326SBram Moolenaar  " legacy script white space
13851e93326SBram Moolenaar  let b = 0z0011223344
13951e93326SBram Moolenaar  call assert_equal(0z2233, b[2:3])
1406e5ea8d2SBram Moolenaarendfunc
1416e5ea8d2SBram Moolenaar
1422ea773b4SBram Moolenaarfunc Test_blob_get()
14351e93326SBram Moolenaar  let lines =<< trim END
14451e93326SBram Moolenaar      VAR b = 0z0011223344
1452ea773b4SBram Moolenaar      call assert_equal(0x00, get(b, 0))
1462ea773b4SBram Moolenaar      call assert_equal(0x22, get(b, 2, 999))
1472ea773b4SBram Moolenaar      call assert_equal(0x44, get(b, 4))
1482ea773b4SBram Moolenaar      call assert_equal(0x44, get(b, -1))
1492ea773b4SBram Moolenaar      call assert_equal(-1, get(b, 5))
1502ea773b4SBram Moolenaar      call assert_equal(999, get(b, 5, 999))
1512ea773b4SBram Moolenaar      call assert_equal(-1, get(b, -8))
1522ea773b4SBram Moolenaar      call assert_equal(999, get(b, -8, 999))
15392b83ccfSBram Moolenaar      call assert_equal(10, get(test_null_blob(), 2, 10))
154a5be9b62SBram Moolenaar
155a5be9b62SBram Moolenaar      call assert_equal(0x00, b[0])
156a5be9b62SBram Moolenaar      call assert_equal(0x22, b[2])
157a5be9b62SBram Moolenaar      call assert_equal(0x44, b[4])
158a5be9b62SBram Moolenaar      call assert_equal(0x44, b[-1])
15951e93326SBram Moolenaar  END
16051e93326SBram Moolenaar  call CheckLegacyAndVim9Success(lines)
16151e93326SBram Moolenaar
16251e93326SBram Moolenaar  let lines =<< trim END
16351e93326SBram Moolenaar      VAR b = 0z0011223344
16451e93326SBram Moolenaar      echo b[5]
16551e93326SBram Moolenaar  END
16651e93326SBram Moolenaar  call CheckLegacyAndVim9Failure(lines, 'E979:')
16751e93326SBram Moolenaar
16851e93326SBram Moolenaar  let lines =<< trim END
16951e93326SBram Moolenaar      VAR b = 0z0011223344
17051e93326SBram Moolenaar      echo b[-8]
17151e93326SBram Moolenaar  END
17251e93326SBram Moolenaar  call CheckLegacyAndVim9Failure(lines, 'E979:')
1732ea773b4SBram Moolenaarendfunc
1742ea773b4SBram Moolenaar
1756e5ea8d2SBram Moolenaarfunc Test_blob_to_string()
17651e93326SBram Moolenaar  let lines =<< trim END
17751e93326SBram Moolenaar      VAR b = 0z00112233445566778899aabbccdd
1784131fd55SBram Moolenaar      call assert_equal('0z00112233.44556677.8899AABB.CCDD', string(b))
1794131fd55SBram Moolenaar      call assert_equal(b, eval(string(b)))
1804131fd55SBram Moolenaar      call remove(b, 4, -1)
1814131fd55SBram Moolenaar      call assert_equal('0z00112233', string(b))
1826e5ea8d2SBram Moolenaar      call remove(b, 0, 3)
1834131fd55SBram Moolenaar      call assert_equal('0z', string(b))
18492b83ccfSBram Moolenaar      call assert_equal('0z', string(test_null_blob()))
18551e93326SBram Moolenaar  END
18651e93326SBram Moolenaar  call CheckLegacyAndVim9Success(lines)
1876e5ea8d2SBram Moolenaarendfunc
1886e5ea8d2SBram Moolenaar
1896e5ea8d2SBram Moolenaarfunc Test_blob_compare()
19051e93326SBram Moolenaar  let lines =<< trim END
19151e93326SBram Moolenaar      VAR b1 = 0z0011
19251e93326SBram Moolenaar      VAR b2 = 0z1100
19351e93326SBram Moolenaar      VAR b3 = 0z001122
194c0f5a78cSBram Moolenaar      call assert_true(b1 == b1)
1956e5ea8d2SBram Moolenaar      call assert_false(b1 == b2)
196c0f5a78cSBram Moolenaar      call assert_false(b1 == b3)
1976e5ea8d2SBram Moolenaar      call assert_true(b1 != b2)
198c0f5a78cSBram Moolenaar      call assert_true(b1 != b3)
1996e5ea8d2SBram Moolenaar      call assert_true(b1 == 0z0011)
2006e5ea8d2SBram Moolenaar
2016e5ea8d2SBram Moolenaar      call assert_false(b1 is b2)
20251e93326SBram Moolenaar      LET b2 = b1
2033d28b58cSBram Moolenaar      call assert_true(b1 == b2)
2046e5ea8d2SBram Moolenaar      call assert_true(b1 is b2)
20551e93326SBram Moolenaar      LET b2 = copy(b1)
2063d28b58cSBram Moolenaar      call assert_true(b1 == b2)
2073d28b58cSBram Moolenaar      call assert_false(b1 is b2)
20851e93326SBram Moolenaar      LET b2 = b1[:]
2093d28b58cSBram Moolenaar      call assert_true(b1 == b2)
2103d28b58cSBram Moolenaar      call assert_false(b1 is b2)
2119d8d0b5cSBram Moolenaar      call assert_true(b1 isnot b2)
21251e93326SBram Moolenaar  END
21351e93326SBram Moolenaar  call CheckLegacyAndVim9Success(lines)
2146e5ea8d2SBram Moolenaar
21551e93326SBram Moolenaar  let lines =<< trim END
21651e93326SBram Moolenaar      VAR b1 = 0z0011
21751e93326SBram Moolenaar      echo b1 == 9
21851e93326SBram Moolenaar  END
21951e93326SBram Moolenaar  call CheckLegacyAndVim9Failure(lines, ['E977:', 'E1072', 'E1072'])
22051e93326SBram Moolenaar
22151e93326SBram Moolenaar  let lines =<< trim END
22251e93326SBram Moolenaar      VAR b1 = 0z0011
22351e93326SBram Moolenaar      echo b1 != 9
22451e93326SBram Moolenaar  END
22551e93326SBram Moolenaar  call CheckLegacyAndVim9Failure(lines, ['E977:', 'E1072', 'E1072'])
22651e93326SBram Moolenaar
22751e93326SBram Moolenaar  let lines =<< trim END
22851e93326SBram Moolenaar      VAR b1 = 0z0011
22951e93326SBram Moolenaar      VAR b2 = 0z1100
23051e93326SBram Moolenaar      VAR x = b1 > b2
23151e93326SBram Moolenaar  END
23251e93326SBram Moolenaar  call CheckLegacyAndVim9Failure(lines, ['E978:', 'E1072:', 'E1072:'])
23351e93326SBram Moolenaar
23451e93326SBram Moolenaar  let lines =<< trim END
23551e93326SBram Moolenaar      VAR b1 = 0z0011
23651e93326SBram Moolenaar      VAR b2 = 0z1100
23751e93326SBram Moolenaar      VAR x = b1 < b2
23851e93326SBram Moolenaar  END
23951e93326SBram Moolenaar  call CheckLegacyAndVim9Failure(lines, ['E978:', 'E1072:', 'E1072:'])
24051e93326SBram Moolenaar
24151e93326SBram Moolenaar  let lines =<< trim END
24251e93326SBram Moolenaar      VAR b1 = 0z0011
24351e93326SBram Moolenaar      VAR b2 = 0z1100
24451e93326SBram Moolenaar      VAR x = b1 - b2
24551e93326SBram Moolenaar  END
24651e93326SBram Moolenaar  call CheckLegacyAndVim9Failure(lines, ['E974:', 'E1036:', 'E974:'])
24751e93326SBram Moolenaar
24851e93326SBram Moolenaar  let lines =<< trim END
24951e93326SBram Moolenaar      VAR b1 = 0z0011
25051e93326SBram Moolenaar      VAR b2 = 0z1100
25151e93326SBram Moolenaar      VAR x = b1 / b2
25251e93326SBram Moolenaar  END
25351e93326SBram Moolenaar  call CheckLegacyAndVim9Failure(lines, ['E974:', 'E1036:', 'E974:'])
25451e93326SBram Moolenaar
25551e93326SBram Moolenaar  let lines =<< trim END
25651e93326SBram Moolenaar      VAR b1 = 0z0011
25751e93326SBram Moolenaar      VAR b2 = 0z1100
25851e93326SBram Moolenaar      VAR x = b1 * b2
25951e93326SBram Moolenaar  END
26051e93326SBram Moolenaar  call CheckLegacyAndVim9Failure(lines, ['E974:', 'E1036:', 'E974:'])
2616e5ea8d2SBram Moolenaarendfunc
2626e5ea8d2SBram Moolenaar
26351e93326SBram Moolenaarfunc Test_blob_index_assign()
26451e93326SBram Moolenaar  let lines =<< trim END
26551e93326SBram Moolenaar      VAR b = 0z00
26651e93326SBram Moolenaar      LET b[1] = 0x11
26751e93326SBram Moolenaar      LET b[2] = 0x22
2686e5ea8d2SBram Moolenaar      call assert_equal(0z001122, b)
26951e93326SBram Moolenaar  END
27051e93326SBram Moolenaar  call CheckLegacyAndVim9Success(lines)
27151e93326SBram Moolenaar
27251e93326SBram Moolenaar  let lines =<< trim END
27351e93326SBram Moolenaar      VAR b = 0z00
27451e93326SBram Moolenaar      LET b[2] = 0x33
27551e93326SBram Moolenaar  END
27651e93326SBram Moolenaar  call CheckLegacyAndVim9Failure(lines, 'E979:')
27751e93326SBram Moolenaar
27851e93326SBram Moolenaar  let lines =<< trim END
27951e93326SBram Moolenaar      VAR b = 0z00
28051e93326SBram Moolenaar      LET b[-2] = 0x33
28151e93326SBram Moolenaar  END
28251e93326SBram Moolenaar  call CheckLegacyAndVim9Failure(lines, 'E979:')
2836e5ea8d2SBram Moolenaarendfunc
2846e5ea8d2SBram Moolenaar
2856e5ea8d2SBram Moolenaarfunc Test_blob_for_loop()
286d551d6c2SBram Moolenaar  let lines =<< trim END
287d551d6c2SBram Moolenaar      VAR blob = 0z00010203
288d551d6c2SBram Moolenaar      VAR i = 0
2896e5ea8d2SBram Moolenaar      for byte in blob
2906e5ea8d2SBram Moolenaar        call assert_equal(i, byte)
291d551d6c2SBram Moolenaar        LET i += 1
2926e5ea8d2SBram Moolenaar      endfor
293dd29ea18SBram Moolenaar      call assert_equal(4, i)
2946e5ea8d2SBram Moolenaar
295d551d6c2SBram Moolenaar      LET blob = 0z00
2966e5ea8d2SBram Moolenaar      call remove(blob, 0)
2976e5ea8d2SBram Moolenaar      call assert_equal(0, len(blob))
2986e5ea8d2SBram Moolenaar      for byte in blob
299d551d6c2SBram Moolenaar        call assert_report('loop over empty blob')
3006e5ea8d2SBram Moolenaar      endfor
301dd29ea18SBram Moolenaar
302d551d6c2SBram Moolenaar      LET blob = 0z0001020304
303d551d6c2SBram Moolenaar      LET i = 0
304dd29ea18SBram Moolenaar      for byte in blob
305dd29ea18SBram Moolenaar        call assert_equal(i, byte)
306dd29ea18SBram Moolenaar        if i == 1
307dd29ea18SBram Moolenaar          call remove(blob, 0)
308dd29ea18SBram Moolenaar        elseif i == 3
309dd29ea18SBram Moolenaar          call remove(blob, 3)
310dd29ea18SBram Moolenaar        endif
311d551d6c2SBram Moolenaar        LET i += 1
312dd29ea18SBram Moolenaar      endfor
313dd29ea18SBram Moolenaar      call assert_equal(5, i)
314d551d6c2SBram Moolenaar  END
315d551d6c2SBram Moolenaar  call CheckLegacyAndVim9Success(lines)
3166e5ea8d2SBram Moolenaarendfunc
3176e5ea8d2SBram Moolenaar
3186e5ea8d2SBram Moolenaarfunc Test_blob_concatenate()
319b7c21afeSBram Moolenaar  let lines =<< trim END
320b7c21afeSBram Moolenaar      VAR b = 0z0011
321b7c21afeSBram Moolenaar      LET b += 0z2233
3226e5ea8d2SBram Moolenaar      call assert_equal(0z00112233, b)
3236e5ea8d2SBram Moolenaar
324b7c21afeSBram Moolenaar      LET b = 0zDEAD + 0zBEEF
3256e5ea8d2SBram Moolenaar      call assert_equal(0zDEADBEEF, b)
326b7c21afeSBram Moolenaar  END
327b7c21afeSBram Moolenaar  call CheckLegacyAndVim9Success(lines)
328b7c21afeSBram Moolenaar
329b7c21afeSBram Moolenaar  let lines =<< trim END
330b7c21afeSBram Moolenaar      VAR b = 0z0011
331b7c21afeSBram Moolenaar      LET b += "a"
332b7c21afeSBram Moolenaar  END
333b7c21afeSBram Moolenaar  call CheckLegacyAndVim9Failure(lines, ['E734:', 'E1012:', 'E734:'])
334b7c21afeSBram Moolenaar
335b7c21afeSBram Moolenaar  let lines =<< trim END
336b7c21afeSBram Moolenaar      VAR b = 0z0011
337b7c21afeSBram Moolenaar      LET b += 88
338b7c21afeSBram Moolenaar  END
339b7c21afeSBram Moolenaar  call CheckLegacyAndVim9Failure(lines, ['E734:', 'E1012:', 'E734:'])
3406e5ea8d2SBram Moolenaarendfunc
3416e5ea8d2SBram Moolenaar
34205500eceSBram Moolenaarfunc Test_blob_add()
343b7c21afeSBram Moolenaar  let lines =<< trim END
344b7c21afeSBram Moolenaar      VAR b = 0z0011
34505500eceSBram Moolenaar      call add(b, 0x22)
34605500eceSBram Moolenaar      call assert_equal(0z001122, b)
347b7c21afeSBram Moolenaar  END
348b7c21afeSBram Moolenaar  call CheckLegacyAndVim9Success(lines)
349b7c21afeSBram Moolenaar
350b7c21afeSBram Moolenaar  " Only works in legacy script
351b7c21afeSBram Moolenaar  let b = 0z0011
35205500eceSBram Moolenaar  call add(b, '51')
353b7c21afeSBram Moolenaar  call assert_equal(0z001133, b)
354ea04a6e8SBram Moolenaar  call assert_equal(1, add(test_null_blob(), 0x22))
35505500eceSBram Moolenaar
356b7c21afeSBram Moolenaar  let lines =<< trim END
357b7c21afeSBram Moolenaar      VAR b = 0z0011
358b7c21afeSBram Moolenaar      call add(b, [9])
359b7c21afeSBram Moolenaar  END
3600ad871dcSYegappan Lakshmanan  call CheckLegacyAndVim9Failure(lines, ['E745:', 'E1012:', 'E1210:'])
361b7c21afeSBram Moolenaar
362b7c21afeSBram Moolenaar  let lines =<< trim END
363b7c21afeSBram Moolenaar      VAR b = 0z0011
364b7c21afeSBram Moolenaar      call add("", 0x01)
365b7c21afeSBram Moolenaar  END
3664490ec4eSYegappan Lakshmanan  call CheckLegacyAndVim9Failure(lines, ['E897:', 'E1013:', 'E1226:'])
367b7c21afeSBram Moolenaar
368b7c21afeSBram Moolenaar  let lines =<< trim END
369b7c21afeSBram Moolenaar      add(test_null_blob(), 0x22)
370b7c21afeSBram Moolenaar  END
371b7c21afeSBram Moolenaar  call CheckDefExecAndScriptFailure(lines, 'E1131:')
37205500eceSBram Moolenaarendfunc
37305500eceSBram Moolenaar
37405500eceSBram Moolenaarfunc Test_blob_empty()
37505500eceSBram Moolenaar  call assert_false(empty(0z001122))
37605500eceSBram Moolenaar  call assert_true(empty(0z))
37705500eceSBram Moolenaar  call assert_true(empty(test_null_blob()))
37805500eceSBram Moolenaarendfunc
37905500eceSBram Moolenaar
3806e5ea8d2SBram Moolenaar" Test removing items in blob
3816e5ea8d2SBram Moolenaarfunc Test_blob_func_remove()
38239211cbaSBram Moolenaar  let lines =<< trim END
38339211cbaSBram Moolenaar      #" Test removing 1 element
38439211cbaSBram Moolenaar      VAR b = 0zDEADBEEF
3856e5ea8d2SBram Moolenaar      call assert_equal(0xDE, remove(b, 0))
3866e5ea8d2SBram Moolenaar      call assert_equal(0zADBEEF, b)
3876e5ea8d2SBram Moolenaar
38839211cbaSBram Moolenaar      LET b = 0zDEADBEEF
3896e5ea8d2SBram Moolenaar      call assert_equal(0xEF, remove(b, -1))
3906e5ea8d2SBram Moolenaar      call assert_equal(0zDEADBE, b)
3916e5ea8d2SBram Moolenaar
39239211cbaSBram Moolenaar      LET b = 0zDEADBEEF
3936e5ea8d2SBram Moolenaar      call assert_equal(0xAD, remove(b, 1))
3946e5ea8d2SBram Moolenaar      call assert_equal(0zDEBEEF, b)
3956e5ea8d2SBram Moolenaar
39639211cbaSBram Moolenaar      #" Test removing range of element(s)
39739211cbaSBram Moolenaar      LET b = 0zDEADBEEF
3986e5ea8d2SBram Moolenaar      call assert_equal(0zBE, remove(b, 2, 2))
3996e5ea8d2SBram Moolenaar      call assert_equal(0zDEADEF, b)
4006e5ea8d2SBram Moolenaar
40139211cbaSBram Moolenaar      LET b = 0zDEADBEEF
4026e5ea8d2SBram Moolenaar      call assert_equal(0zADBE, remove(b, 1, 2))
4036e5ea8d2SBram Moolenaar      call assert_equal(0zDEEF, b)
40439211cbaSBram Moolenaar  END
40539211cbaSBram Moolenaar  call CheckLegacyAndVim9Success(lines)
4066e5ea8d2SBram Moolenaar
4076e5ea8d2SBram Moolenaar  " Test invalid cases
40839211cbaSBram Moolenaar  let lines =<< trim END
40939211cbaSBram Moolenaar      VAR b = 0zDEADBEEF
41039211cbaSBram Moolenaar      call remove(b, 5)
41139211cbaSBram Moolenaar  END
41239211cbaSBram Moolenaar  call CheckLegacyAndVim9Failure(lines, 'E979:')
41339211cbaSBram Moolenaar
41439211cbaSBram Moolenaar  let lines =<< trim END
41539211cbaSBram Moolenaar      VAR b = 0zDEADBEEF
41639211cbaSBram Moolenaar      call remove(b, 1, 5)
41739211cbaSBram Moolenaar  END
41839211cbaSBram Moolenaar  call CheckLegacyAndVim9Failure(lines, 'E979:')
41939211cbaSBram Moolenaar
42039211cbaSBram Moolenaar  let lines =<< trim END
42139211cbaSBram Moolenaar      VAR b = 0zDEADBEEF
42239211cbaSBram Moolenaar      call remove(b, 3, 2)
42339211cbaSBram Moolenaar  END
42439211cbaSBram Moolenaar  call CheckLegacyAndVim9Failure(lines, 'E979:')
42539211cbaSBram Moolenaar
42639211cbaSBram Moolenaar  let lines =<< trim END
42739211cbaSBram Moolenaar      VAR b = 0zDEADBEEF
42839211cbaSBram Moolenaar      call remove(test_null_blob(), 1, 2)
42939211cbaSBram Moolenaar  END
43039211cbaSBram Moolenaar  call CheckLegacyAndVim9Failure(lines, 'E979:')
43180d7395dSSean Dewar
43280d7395dSSean Dewar  let lines =<< trim END
43380d7395dSSean Dewar      let b = 0zDEADBEEF
43480d7395dSSean Dewar      lockvar b
43580d7395dSSean Dewar      call remove(b, 0)
43680d7395dSSean Dewar      unlockvar b
43780d7395dSSean Dewar  END
43880d7395dSSean Dewar  call CheckScriptFailure(lines, 'E741:')
43980d7395dSSean Dewar
44080d7395dSSean Dewar  " can only check at script level, not in a :def function
44180d7395dSSean Dewar  let lines =<< trim END
44280d7395dSSean Dewar      vim9script
44380d7395dSSean Dewar      var b = 0zDEADBEEF
44480d7395dSSean Dewar      lockvar b
44580d7395dSSean Dewar      remove(b, 0)
44680d7395dSSean Dewar  END
44780d7395dSSean Dewar  call CheckScriptFailure(lines, 'E741:')
4486e5ea8d2SBram Moolenaarendfunc
4496e5ea8d2SBram Moolenaar
4506e5ea8d2SBram Moolenaarfunc Test_blob_read_write()
45139211cbaSBram Moolenaar  let lines =<< trim END
45239211cbaSBram Moolenaar      VAR b = 0zDEADBEEF
4536e5ea8d2SBram Moolenaar      call writefile(b, 'Xblob')
45439211cbaSBram Moolenaar      VAR br = readfile('Xblob', 'B')
4556e5ea8d2SBram Moolenaar      call assert_equal(b, br)
4566e5ea8d2SBram Moolenaar      call delete('Xblob')
45739211cbaSBram Moolenaar  END
45839211cbaSBram Moolenaar  call CheckLegacyAndVim9Success(lines)
45915352dc6SBram Moolenaar
46015352dc6SBram Moolenaar  " This was crashing when calling readfile() with a directory.
46115352dc6SBram Moolenaar  call assert_fails("call readfile('.', 'B')", 'E17: "." is a directory')
4626e5ea8d2SBram Moolenaarendfunc
4636e5ea8d2SBram Moolenaar
4646e5ea8d2SBram Moolenaar" filter() item in blob
4656e5ea8d2SBram Moolenaarfunc Test_blob_filter()
46639211cbaSBram Moolenaar  let lines =<< trim END
467ffdf8adfSBram Moolenaar      call assert_equal(test_null_blob(), filter(test_null_blob(), '0'))
46849c57ce5SBram Moolenaar      call assert_equal(0z, filter(0zDEADBEEF, '0'))
46949c57ce5SBram Moolenaar      call assert_equal(0zADBEEF, filter(0zDEADBEEF, 'v:val != 0xDE'))
47049c57ce5SBram Moolenaar      call assert_equal(0zDEADEF, filter(0zDEADBEEF, 'v:val != 0xBE'))
47149c57ce5SBram Moolenaar      call assert_equal(0zDEADBE, filter(0zDEADBEEF, 'v:val != 0xEF'))
47249c57ce5SBram Moolenaar      call assert_equal(0zDEADBEEF, filter(0zDEADBEEF, '1'))
47349c57ce5SBram Moolenaar      call assert_equal(0z01030103, filter(0z010203010203, 'v:val != 0x02'))
47449c57ce5SBram Moolenaar      call assert_equal(0zADEF, filter(0zDEADBEEF, 'v:key % 2'))
47539211cbaSBram Moolenaar  END
47639211cbaSBram Moolenaar  call CheckLegacyAndVim9Success(lines)
4776e5ea8d2SBram Moolenaarendfunc
4786e5ea8d2SBram Moolenaar
4796e5ea8d2SBram Moolenaar" map() item in blob
4806e5ea8d2SBram Moolenaarfunc Test_blob_map()
48139211cbaSBram Moolenaar  let lines =<< trim END
48249c57ce5SBram Moolenaar      call assert_equal(0zDFAEBFF0, map(0zDEADBEEF, 'v:val + 1'))
48349c57ce5SBram Moolenaar      call assert_equal(0z00010203, map(0zDEADBEEF, 'v:key'))
48449c57ce5SBram Moolenaar      call assert_equal(0zDEAEC0F2, map(0zDEADBEEF, 'v:key + v:val'))
48539211cbaSBram Moolenaar  END
48639211cbaSBram Moolenaar  call CheckLegacyAndVim9Success(lines)
48705500eceSBram Moolenaar
48839211cbaSBram Moolenaar  let lines =<< trim END
48939211cbaSBram Moolenaar      call map(0z00, '[9]')
49039211cbaSBram Moolenaar  END
49139211cbaSBram Moolenaar  call CheckLegacyAndVim9Failure(lines, 'E978:')
4926e5ea8d2SBram Moolenaarendfunc
4936e5ea8d2SBram Moolenaar
4946e5ea8d2SBram Moolenaarfunc Test_blob_index()
49539211cbaSBram Moolenaar  let lines =<< trim END
4966e5ea8d2SBram Moolenaar      call assert_equal(2, index(0zDEADBEEF, 0xBE))
4976e5ea8d2SBram Moolenaar      call assert_equal(-1, index(0zDEADBEEF, 0))
49805500eceSBram Moolenaar      call assert_equal(2, index(0z11111111, 0x11, 2))
499f9f24ce7SBram Moolenaar      call assert_equal(3, 0z11110111->index(0x11, 2))
50005500eceSBram Moolenaar      call assert_equal(2, index(0z11111111, 0x11, -2))
50105500eceSBram Moolenaar      call assert_equal(3, index(0z11110111, 0x11, -2))
5020e05de46SBram Moolenaar      call assert_equal(0, index(0z11110111, 0x11, -10))
503ad48e6c1SBram Moolenaar      call assert_equal(-1, index(test_null_blob(), 1))
50439211cbaSBram Moolenaar  END
50539211cbaSBram Moolenaar  call CheckLegacyAndVim9Success(lines)
5066e5ea8d2SBram Moolenaarendfunc
5076e5ea8d2SBram Moolenaar
5086e5ea8d2SBram Moolenaarfunc Test_blob_insert()
50939211cbaSBram Moolenaar  let lines =<< trim END
51039211cbaSBram Moolenaar      VAR b = 0zDEADBEEF
5116e5ea8d2SBram Moolenaar      call insert(b, 0x33)
5126e5ea8d2SBram Moolenaar      call assert_equal(0z33DEADBEEF, b)
5136e5ea8d2SBram Moolenaar
51439211cbaSBram Moolenaar      LET b = 0zDEADBEEF
5156e5ea8d2SBram Moolenaar      call insert(b, 0x33, 2)
5166e5ea8d2SBram Moolenaar      call assert_equal(0zDEAD33BEEF, b)
51739211cbaSBram Moolenaar  END
51839211cbaSBram Moolenaar  call CheckLegacyAndVim9Success(lines)
51905500eceSBram Moolenaar
52039211cbaSBram Moolenaar  " only works in legacy script
52192b83ccfSBram Moolenaar  call assert_equal(0, insert(test_null_blob(), 0x33))
52239211cbaSBram Moolenaar
52339211cbaSBram Moolenaar  let lines =<< trim END
52439211cbaSBram Moolenaar      VAR b = 0zDEADBEEF
52539211cbaSBram Moolenaar      call insert(b, -1)
52639211cbaSBram Moolenaar  END
52739211cbaSBram Moolenaar  call CheckLegacyAndVim9Failure(lines, 'E475:')
52839211cbaSBram Moolenaar
52939211cbaSBram Moolenaar  let lines =<< trim END
53039211cbaSBram Moolenaar      VAR b = 0zDEADBEEF
53139211cbaSBram Moolenaar      call insert(b, 257)
53239211cbaSBram Moolenaar  END
53339211cbaSBram Moolenaar  call CheckLegacyAndVim9Failure(lines, 'E475:')
53439211cbaSBram Moolenaar
53539211cbaSBram Moolenaar  let lines =<< trim END
53639211cbaSBram Moolenaar      VAR b = 0zDEADBEEF
53739211cbaSBram Moolenaar      call insert(b, 0, [9])
53839211cbaSBram Moolenaar  END
5390ad871dcSYegappan Lakshmanan  call CheckLegacyAndVim9Failure(lines, ['E745:', 'E1013:', 'E1210:'])
54039211cbaSBram Moolenaar
54139211cbaSBram Moolenaar  let lines =<< trim END
54239211cbaSBram Moolenaar      VAR b = 0zDEADBEEF
54339211cbaSBram Moolenaar      call insert(b, 0, -20)
54439211cbaSBram Moolenaar  END
54539211cbaSBram Moolenaar  call CheckLegacyAndVim9Failure(lines, 'E475:')
54639211cbaSBram Moolenaar
54739211cbaSBram Moolenaar  let lines =<< trim END
54839211cbaSBram Moolenaar      VAR b = 0zDEADBEEF
54939211cbaSBram Moolenaar      call insert(b, 0, 20)
55039211cbaSBram Moolenaar  END
55139211cbaSBram Moolenaar  call CheckLegacyAndVim9Failure(lines, 'E475:')
55239211cbaSBram Moolenaar
55339211cbaSBram Moolenaar  let lines =<< trim END
55439211cbaSBram Moolenaar      VAR b = 0zDEADBEEF
55539211cbaSBram Moolenaar      call insert(b, [])
55639211cbaSBram Moolenaar  END
5570ad871dcSYegappan Lakshmanan  call CheckLegacyAndVim9Failure(lines, ['E745:', 'E1013:', 'E1210:'])
55839211cbaSBram Moolenaar
55939211cbaSBram Moolenaar  let lines =<< trim END
56039211cbaSBram Moolenaar      insert(test_null_blob(), 0x33)
56139211cbaSBram Moolenaar  END
56239211cbaSBram Moolenaar  call CheckDefExecAndScriptFailure(lines, 'E1131:')
56380d7395dSSean Dewar
56480d7395dSSean Dewar  let lines =<< trim END
56580d7395dSSean Dewar      let b = 0zDEADBEEF
56680d7395dSSean Dewar      lockvar b
56780d7395dSSean Dewar      call insert(b, 3)
56880d7395dSSean Dewar      unlockvar b
56980d7395dSSean Dewar  END
57080d7395dSSean Dewar  call CheckScriptFailure(lines, 'E741:')
57180d7395dSSean Dewar
57280d7395dSSean Dewar  let lines =<< trim END
57380d7395dSSean Dewar      vim9script
57480d7395dSSean Dewar      var b = 0zDEADBEEF
57580d7395dSSean Dewar      lockvar b
57680d7395dSSean Dewar      insert(b, 3)
57780d7395dSSean Dewar  END
57880d7395dSSean Dewar  call CheckScriptFailure(lines, 'E741:')
5796e5ea8d2SBram Moolenaarendfunc
5806e5ea8d2SBram Moolenaar
5816e5ea8d2SBram Moolenaarfunc Test_blob_reverse()
58239211cbaSBram Moolenaar  let lines =<< trim END
5836e5ea8d2SBram Moolenaar      call assert_equal(0zEFBEADDE, reverse(0zDEADBEEF))
5846e5ea8d2SBram Moolenaar      call assert_equal(0zBEADDE, reverse(0zDEADBE))
5856e5ea8d2SBram Moolenaar      call assert_equal(0zADDE, reverse(0zDEAD))
5866e5ea8d2SBram Moolenaar      call assert_equal(0zDE, reverse(0zDE))
58792b83ccfSBram Moolenaar      call assert_equal(0z, reverse(test_null_blob()))
58839211cbaSBram Moolenaar  END
58939211cbaSBram Moolenaar  call CheckLegacyAndVim9Success(lines)
5906e5ea8d2SBram Moolenaarendfunc
5916e5ea8d2SBram Moolenaar
5926e5ea8d2SBram Moolenaarfunc Test_blob_json_encode()
59339211cbaSBram Moolenaar  let lines =<< trim END
5946e5ea8d2SBram Moolenaar      call assert_equal('[222,173,190,239]', json_encode(0zDEADBEEF))
5956e5ea8d2SBram Moolenaar      call assert_equal('[]', json_encode(0z))
59639211cbaSBram Moolenaar  END
59739211cbaSBram Moolenaar  call CheckLegacyAndVim9Success(lines)
5986e5ea8d2SBram Moolenaarendfunc
599c0f5a78cSBram Moolenaar
600c0f5a78cSBram Moolenaarfunc Test_blob_lock()
60139211cbaSBram Moolenaar  let lines =<< trim END
602c0f5a78cSBram Moolenaar      let b = 0z112233
603c0f5a78cSBram Moolenaar      lockvar b
604c0f5a78cSBram Moolenaar      unlockvar b
605c0f5a78cSBram Moolenaar      let b = 0z44
60639211cbaSBram Moolenaar  END
60739211cbaSBram Moolenaar  call CheckScriptSuccess(lines)
60839211cbaSBram Moolenaar
60939211cbaSBram Moolenaar  let lines =<< trim END
61039211cbaSBram Moolenaar      vim9script
61139211cbaSBram Moolenaar      var b = 0z112233
61239211cbaSBram Moolenaar      lockvar b
61339211cbaSBram Moolenaar      unlockvar b
61439211cbaSBram Moolenaar      b = 0z44
61539211cbaSBram Moolenaar  END
61639211cbaSBram Moolenaar  call CheckScriptSuccess(lines)
61739211cbaSBram Moolenaar
61839211cbaSBram Moolenaar  let lines =<< trim END
61939211cbaSBram Moolenaar      let b = 0z112233
62039211cbaSBram Moolenaar      lockvar b
62139211cbaSBram Moolenaar      let b = 0z44
62239211cbaSBram Moolenaar  END
62339211cbaSBram Moolenaar  call CheckScriptFailure(lines, 'E741:')
62439211cbaSBram Moolenaar
62539211cbaSBram Moolenaar  let lines =<< trim END
62639211cbaSBram Moolenaar      vim9script
62739211cbaSBram Moolenaar      var b = 0z112233
62839211cbaSBram Moolenaar      lockvar b
62939211cbaSBram Moolenaar      b = 0z44
63039211cbaSBram Moolenaar  END
63139211cbaSBram Moolenaar  call CheckScriptFailure(lines, 'E741:')
632c0f5a78cSBram Moolenaarendfunc
633c0f5a78cSBram Moolenaar
634c0f5a78cSBram Moolenaarfunc Test_blob_sort()
63592be6e3fSBram Moolenaar  if has('float')
63639211cbaSBram Moolenaar    call CheckLegacyAndVim9Failure(['call sort([1.0, 0z11], "f")'], 'E975:')
63792be6e3fSBram Moolenaar  endif
638e8209b91SBram Moolenaar  call CheckLegacyAndVim9Failure(['call sort([11, 0z11], "N")'], 'E974:')
639c0f5a78cSBram Moolenaarendfunc
6400e05de46SBram Moolenaar
6415dfe4674SYegappan Lakshmanan" Tests for the blob2list() function
6425dfe4674SYegappan Lakshmananfunc Test_blob2list()
6435dfe4674SYegappan Lakshmanan  call assert_fails('let v = blob2list(10)', 'E1238: Blob required for argument 1')
6445dfe4674SYegappan Lakshmanan  eval 0zFFFF->blob2list()->assert_equal([255, 255])
6455dfe4674SYegappan Lakshmanan  let tests = [[0z0102, [1, 2]],
6465dfe4674SYegappan Lakshmanan        \ [0z00, [0]],
6475dfe4674SYegappan Lakshmanan        \ [0z, []],
6485dfe4674SYegappan Lakshmanan        \ [0z00000000, [0, 0, 0, 0]],
6495dfe4674SYegappan Lakshmanan        \ [0zAABB.CCDD, [170, 187, 204, 221]]]
6505dfe4674SYegappan Lakshmanan  for t in tests
6515dfe4674SYegappan Lakshmanan    call assert_equal(t[0]->blob2list(), t[1])
6525dfe4674SYegappan Lakshmanan  endfor
6535dfe4674SYegappan Lakshmanan  exe 'let v = 0z' .. repeat('000102030405060708090A0B0C0D0E0F', 64)
6545dfe4674SYegappan Lakshmanan  call assert_equal(1024, blob2list(v)->len())
6555dfe4674SYegappan Lakshmanan  call assert_equal([4, 8, 15], [v[100], v[1000], v[1023]])
6565dfe4674SYegappan Lakshmanan  call assert_equal([], blob2list(test_null_blob()))
6575dfe4674SYegappan Lakshmananendfunc
6585dfe4674SYegappan Lakshmanan
6595dfe4674SYegappan Lakshmanan" Tests for the list2blob() function
6605dfe4674SYegappan Lakshmananfunc Test_list2blob()
6615dfe4674SYegappan Lakshmanan  call assert_fails('let b = list2blob(0z10)', 'E1211: List required for argument 1')
6625dfe4674SYegappan Lakshmanan  let tests = [[[1, 2], 0z0102],
6635dfe4674SYegappan Lakshmanan        \ [[0], 0z00],
6645dfe4674SYegappan Lakshmanan        \ [[], 0z],
6655dfe4674SYegappan Lakshmanan        \ [[0, 0, 0, 0], 0z00000000],
666*820d5525SYegappan Lakshmanan        \ [[255, 255], 0zFFFF],
6675dfe4674SYegappan Lakshmanan        \ [[170, 187, 204, 221], 0zAABB.CCDD],
6685dfe4674SYegappan Lakshmanan        \ ]
6695dfe4674SYegappan Lakshmanan  for t in tests
670*820d5525SYegappan Lakshmanan    call assert_equal(t[1], t[0]->list2blob())
6715dfe4674SYegappan Lakshmanan  endfor
6725dfe4674SYegappan Lakshmanan  call assert_fails('let b = list2blob([1, []])', 'E745:')
6735dfe4674SYegappan Lakshmanan  call assert_fails('let b = list2blob([-1])', 'E1239:')
6745dfe4674SYegappan Lakshmanan  call assert_fails('let b = list2blob([256])', 'E1239:')
6755dfe4674SYegappan Lakshmanan  let b = range(16)->repeat(64)->list2blob()
6765dfe4674SYegappan Lakshmanan  call assert_equal(1024, b->len())
6775dfe4674SYegappan Lakshmanan  call assert_equal([4, 8, 15], [b[100], b[1000], b[1023]])
6785dfe4674SYegappan Lakshmanan  call assert_equal(0z, list2blob(test_null_list()))
6795dfe4674SYegappan Lakshmananendfunc
6805dfe4674SYegappan Lakshmanan
6810e05de46SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
682