Files
linguist/samples/Terra/luabridge2.t
2016-01-28 11:22:27 +07:00

92 lines
1.7 KiB
Perl

struct A { a : int, b : double }
terra returnstruct()
var a = A { 1, 2.5}
return a
end
terra returnstruct2()
var a = A { 1, 2.5}
var b = A { 2, 3.5}
return a,b
end
terra returnarray()
var a : int[4] = array(1,2,3,4)
return a
end
terra returnarray2()
var a : int[4] = array(1,2,3,4)
var b : int[4] = array(5,6,7,8)
return a,b
end
terra returnaos()
var a : A[2] = arrayof(A, {1,2.5}, {2,3.5} )
return a
end
struct B { a : int[4] }
terra returnsoa()
var a = B { array(1,2,3,4) }
return a
end
global_a = global(A)
global_a:set( {3, 4.5})
terra retstructptr()
return &global_a
end
terra structptr(a : &A)
return a.a + a.b
end
global_arr = global(int[2])
global_arr:set({3,4})
terra retarrptr()
return &global_arr
end
terra arrptr(a : &int[2])
return (@a)[0] + a[0][1]
end
local test = require("test")
local a0 = returnstruct()
test.eq(a0.a,1)
test.eq(a0.b,2.5)
local a1,b1 = terralib.unpackstruct(returnstruct2())
test.eq(a1.a,1)
test.eq(a1.b,2.5)
test.eq(b1.a,2)
test.eq(b1.b,3.5)
--[[ C doesn't actually allow you to return arrays directly
local arr = returnarray()
test.eq(arr[0],1)
test.eq(arr[1],2)
test.eq(arr[2],3)
test.eq(arr[3],4)
local arr2,arr3 = returnarray2()
test.eq(arr2[0],1)
test.eq(arr2[1],2)
test.eq(arr2[2],3)
test.eq(arr2[3],4)
test.eq(arr3[0],5)
test.eq(arr3[1],6)
test.eq(arr3[2],7)
test.eq(arr3[3],8)
local arr4 = returnaos()
test.eq(arr4[0].a,1)
test.eq(arr4[1].b,3.5)
]]
local arr5 = returnsoa()
test.eq(arr5.a[0],1)
test.eq(arr5.a[3],4)
local ptrret = retstructptr()
test.eq(ptrret[0].a,3)
test.eq(ptrret[0].b,4.5)
test.eq(structptr(ptrret),7.5)
local ptrarr = retarrptr()
test.eq(ptrarr[0][0],3)
test.eq(ptrarr[0][1],4)
test.eq(arrptr(ptrarr),7)