diff options
| author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2009-08-18 20:56:02 +0000 |
|---|---|---|
| committer | Lorry <lorry@roadtrain.codethink.co.uk> | 2012-09-25 16:59:08 +0000 |
| commit | 9f8a09ed743cedd9547bf0661d518647966ab114 (patch) | |
| tree | 9c7803d3b27a8ec22e91792ac7f7932efa128b20 /Examples/test-suite/lua/operator_overload_runme.lua | |
| download | swig-tarball-master.tar.gz | |
Imported from /srv/lorry/lorry-area/swig-tarball/swig-1.3.40.tar.gz.HEADswig-1.3.40master
Diffstat (limited to 'Examples/test-suite/lua/operator_overload_runme.lua')
| -rw-r--r-- | Examples/test-suite/lua/operator_overload_runme.lua | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/Examples/test-suite/lua/operator_overload_runme.lua b/Examples/test-suite/lua/operator_overload_runme.lua new file mode 100644 index 0000000..1610c17 --- /dev/null +++ b/Examples/test-suite/lua/operator_overload_runme.lua @@ -0,0 +1,157 @@ +-- demo of lua swig capacilities (operator overloading) +require("import") -- the import fn +import("operator_overload") -- import lib + +for k,v in pairs(operator_overload) do _G[k]=v end -- move to global + +-- first check all the operators are implemented correctly from pure C++ code +Op_sanity_check() + +-- catching undefined variables +setmetatable(getfenv(),{__index=function (t,i) error("undefined global variable `"..i.."'",2) end}) + +-- test routine: +a=Op() +b=Op(5) +c=Op(b) -- copy construct +d=Op(2) +dd=d; -- assignment operator + +-- test equality +assert(a~=b) +assert(b==c) +assert(a~=d) +assert(d==dd) + +-- test < +assert(a<b) +assert(a<=b) +assert(b<=c) +assert(b>=c) +assert(b>d) +assert(b>=d) + +-- lua does not support += operators: skiping + +-- test + +f=Op(1) +g=Op(1) +assert(f+g==Op(2)) +assert(f-g==Op(0)) +assert(f*g==Op(1)) +assert(f/g==Op(1)) +--assert(f%g==Op(0)) -- lua does not support % + +-- test unary operators +--assert((not a)==true) -- lua does not allow overloading for not operator +--assert((not b)==false) -- lua does not allow overloading for not operator + +--lua 5.0.2 defines that unary - is __unm(self,nil) +--lua 5.1.2 defines that unary - is __unm(self,self) +--C++ expectes unary - as operator-() +--however the latest version of SWIG strictly checks the number of args +--and will complain if too many args are provided +--therefore disabling these tests for now +-- (solution will to be not to check args for this test case) +assert(-a==a) +assert(-b==Op(-5)) + +-- test [] +h=Op(3) +assert(h[0]==3) +assert(h[1]==0) +h[0]=2 -- set +assert(h[0]==2) +h[1]=2 -- ignored +assert(h[0]==2) +assert(h[1]==0) + +-- test () +i=Op(3) +assert(i()==3) +assert(i(1)==4) +assert(i(1,2)==6) + +-- plus add some code to check the __str__ fn +assert(tostring(Op(1))=="Op(1)") +assert(tostring(Op(-3))=="Op(-3)") + +--[[ +/* Sample test code in C++ + +#include <assert.h> +#include <stdio.h> + +int main(int argc,char** argv) +{ + // test routine: + Op a; + Op b=5; + Op c=b; // copy construct + Op d=2; + + // test equality + assert(a!=b); + assert(b==c); + assert(a!=d); + + // test < + assert(a<b); + assert(a<=b); + assert(b<=c); + assert(b>=c); + assert(b>d); + assert(b>=d); + + // test += + Op e=3; + e+=d; + assert(e==b); + e-=c; + assert(e==a); + e=Op(1); + e*=b; + assert(e==c); + e/=d; + assert(e==d); + e%=c; + assert(e==d); + + // test + + Op f(1),g(1); + assert(f+g==Op(2)); + assert(f-g==Op(0)); + assert(f*g==Op(1)); + assert(f/g==Op(1)); + assert(f%g==Op(0)); + + // test unary operators + assert(!a==true); + assert(!b==false); + assert(-a==a); + assert(-b==Op(-5)); + + // test [] + Op h=3; + assert(h[0]==3); + assert(h[1]==0); + h[0]=2; // set + assert(h[0]==2); + h[1]=2; // ignored + assert(h[0]==2); + assert(h[1]==0); + + // test () + Op i=3; + assert(i()==3); + assert(i(1)==4); + assert(i(1,2)==6); + + // plus add some code to check the __str__ fn + //assert(str(Op(1))=="Op(1)"); + //assert(str(Op(-3))=="Op(-3)"); + + printf("ok\n"); +} +*/ +]] |
