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