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

138 lines
2.2 KiB
Perl

--[[
-
+
*
/
%
^
and
or
~= == < > >= <=
<< >>
]]
N = 2
types = {int,int64,uint64,float,double}
names = {"i","l","u","f","d"}
max = 16
for i = 1,#types do
local fenv = getfenv()
for j = 0,max do
local x = global(vector(types[i],N));
(terra() x = j end)()
fenv[names[i]..j] = x
end
end
d375 = global(vector(double,N))
d175 = global(vector(double,N))
terra init()
d375 = 3.75
d175 = 1.75
end
init()
terra test0()
var a = i1 + i3
var b = l1 + l2
var c = u1 + u2
var d = f1 + f2
var e = d1 + d2
return (a + b + c + d + e)[1]
end
terra test1()
var a = i1 - i3
var b = l1 - l2
var c = u1 - u2
var d = f1 - f2
var e = d1 - d2
return (a - b - c - d - e)[1]
end
terra test2()
var a = i2 * i3
var b = l3 * l2
var c = u3 * u2
var d = f1 * f2
var e = d3 * d2
return (a * b * c * d * e)[1]
end
terra test3()
var a = i2 / i3 + i1
var b = l3 / l2 + i1
var c = u3 / u2
var d = f1 / f2
var e = d3 / d2
return (a * b * c * d * e)[1]
end
terra test4()
var a = i2 % i3
var b = l3 % l4
var c = u3 % u2
var d = f1 % f2
var e = d375 % d2
return ((a == i2) and (b == l3) and (d == f1) and (e == d175))[1]
end
terra test5()
var a = i2 ^ i3
var b = l3 ^ l4
var c = u3 ^ u2
return ((a == 1) and (b == l7) and (c == u1))[1]
end
terra test6()
var a = i2 and i3
var b = l3 and l4
var c = u3 and u2
return ((a == 2) and (b == l0) and (c == u2))[1]
end
terra test7()
var a = i2 or i3
var b = l3 or l4
var c = u3 or u2
return ((a == 3) and (b == l7) and (c == u3))[1]
end
terra test8()
var a0,a1 = i2 ~= i3, i2 == i3
var b0,b1 = i2 < i3, i2 >= i3
var c0,c1 = i2 > i3, i2 <= i3
return (a0 and not a1 and b0 and not b1 and not c0 and c1)[1]
end
terra test9()
var a0, a1 = i8 >> i1, i8 << i1
var b0, b1 = -i8 >> i1, -i8 << i1
return (a0 == i4 and a1 == i16 and b0 == -i4 and b1 == -i16)[1]
end
local test = require("test")
test.eq(test0(),16)
test.eq(test1(),2)
test.eq(test2(),2592)
test.eq(test3(),1.5)
test.eq(test4(),true)
test.eq(test5(),true)
test.eq(test6(),true)
test.eq(test7(),true)
test.eq(test8(),true)
test.eq(test9(),true)