/trunk/Examples/lua/owner/runme.lua
Lua | 104 lines | 93 code | 6 blank | 5 comment | 7 complexity | a669d48d34cfcf543f7ec90ee4755bc2 MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
- -- Operator overloading example
- ---- importing ----
- if string.sub(_VERSION,1,7)=='Lua 5.0' then
- -- lua5.0 doesnt have a nice way to do this
- lib=loadlib('example.dll','luaopen_example') or loadlib('example.so','luaopen_example')
- assert(lib)()
- else
- -- lua 5.1 does
- require('example')
- end
-
- print "ok, lets test Lua's ownership of C++ objects"
- print("Currently there are",example.Shape_nshapes,"shapes (there should be 0)")
-
- print "\nLets make a couple"
- a=example.Square(10)
- b=example.Circle(1)
- print("Currently there are",example.Shape_nshapes,"shapes (there should be 2)")
-
- print "\nNote lets use the createX functions"
- c=example.createCircle(5)
- d=example.createSquare(3)
- print("Currently there are",example.Shape_nshapes,"shapes (there should be 4)")
-
- print "\nWe will run the garbage collector & see if they are till here"
- collectgarbage()
- print("Currently there are",example.Shape_nshapes,"shapes (there should be 4)")
-
- print "\nLets get rid of them all, collect garbage & see if they are till here"
- a,b,c,d=nil,nil,nil,nil
- collectgarbage()
- print("Currently there are",example.Shape_nshapes,"shapes (there should be 0)")
-
- print "\nLets start putting stuff into the ShapeOwner"
- print "The ShapeOwner now owns the shapes, but Lua still has pointers to them"
- o=example.ShapeOwner()
- a=example.Square(10)
- b=example.Circle(1)
- o:add(a)
- o:add(b)
- o:add(example.createSquare(5))
- print("Currently there are",example.Shape_nshapes,"shapes (there should be 3)")
-
- print "\nWe will nil our references,run the garbage collector & see if they are till here"
- print "they should be, as the ShapeOwner owns them"
- a,b=nil,nil
- collectgarbage()
- print("Currently there are",example.Shape_nshapes,"shapes (there should be 3)")
-
- print "\nWe will access them and check that they are still valid"
- a=o:get(0)
- b=o:get(1)
- print(" Area's are",a:area(),b:area(),o:get(2):area())
- collectgarbage()
- print("Currently there are",example.Shape_nshapes,"shapes (there should be 3)")
-
- print "\nWe will remove one from the C++ owner & pass its ownership to Lua,"
- print " then check that they are still unchanged"
- a,b=nil,nil
- a=o:remove(0) -- a now owns it
- collectgarbage()
- print("Currently there are",example.Shape_nshapes,"shapes (there should be 3)")
-
- print "\nDelete the ShapeOwner (this should destroy two shapes),"
- print " but we have one left in Lua"
- o=nil
- collectgarbage()
- print("Currently there are",example.Shape_nshapes,"shapes (there should be 1)")
-
- print "\nFinal tidy up "
- a=nil
- collectgarbage()
- print("Currently there are",example.Shape_nshapes,"shapes (there should be 0)")
-
-
- print "Final test, we will create some Shapes & pass them around like mad"
- print "If there is any memory leak, you will see it in the memory usage"
- io.flush()
- sh={}
- -- make some objects
- for i=0,10 do
- a=example.Circle(i)
- b=example.Square(i)
- sh[a]=true
- sh[b]=true
- end
- o=example.ShapeOwner()
- for i=0,10000 do
- for k,_ in pairs(sh) do
- o:add(k)
- end
- sh={} -- clear it
- while true do
- a=o:remove(0)
- if a==nil then break end
- sh[a]=true
- end
- if i%100==0 then collectgarbage() end
- end
- print "done"
- o,sh=nil,nil
- collectgarbage()
- print("Currently there are",example.Shape_nshapes,"shapes (there should be 0)")
- print "thats all folks!"