local ffi = require("ffi")
do local arr = ffi.typeof("char[11]")
local a = arr()
local b = arr()
local c = arr()
for i=0,9 do a[i] = 97+i; b[i] = 106-i end
a[10] = 0; b[10] = 0;
ffi.copy(c, a, 11)
for i=0,9 do assert(c[i] == 97+i) end
assert(ffi.string(c) == "abcdefghij")
ffi.copy(c, b, 5)
for i=0,4 do assert(c[i] == 106-i) end
for i=5,9 do assert(c[i] == 97+i) end
assert(ffi.string(c) == "jihgffghij")
c[7] = 0
assert(ffi.string(c) == "jihgffg")
c[10] = 1
ffi.copy(c, "ABCDEFGHIJ")
for i=0,9 do assert(c[i] == 65+i) end
assert(c[10] == 0)
assert(ffi.string(c) == "ABCDEFGHIJ")
ffi.copy(c, "abcdefghij", 5)
assert(ffi.string(c) == "abcdeFGHIJ")
ffi.fill(c, 10, 65)
assert(ffi.string(c) == "AAAAAAAAAA")
for i=10,0,-1 do ffi.fill(c, i, 96+i) end
assert(ffi.string(c) == "abcdefghij")
ffi.fill(c, 10)
assert(c[0] == 0)
assert(c[9] == 0)
ffi.fill(c, 10, 65)
assert(ffi.string(c, 5) == "AAAAA")
end
do local a = ffi.new("char[10]", 64)
local x
for i=1,100 do a[0] = i; x = ffi.string(a, 10) end
assert(x == "d@@@@@@@@@")
end
do local a = ffi.new("char[1]")
local x, y
for i=1,100 do
a[0] = i
x = ffi.string(a, 1)
a[0] = 126
y = ffi.string(a, 1)
end
assert(x == "d" and y == "~")
end