mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 09:40:21 +00:00
92 lines
1.7 KiB
Perl
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) |