--[[ Prototype Delegation and Cloning with Mixins Test Script H. Conrad Cunningham, Professor Computer and Information Science University of Mississippi 1234567890123456789012345678901234567890123456789012345678901234567890 2016-10-31: Completed first version --]] -- Import Prototype Module Prototype = require("Prototype") -- Some testing using squares print("\nTesting of new") local sq = Prototype:new { x = 0, y = 0, side = 0 } print( "sq", sq.x == 0, sq.y == 0, sq.side == 0, sq.new == Prototype.new, sq.__index == Prototype, getmetatable(sq) == sq ) local sq1 = sq:new { x = 1, side = 1 } print( "sq1", sq1.x == 1, sq1.y == 0, sq1.side == 1, sq1.new == Prototype.new, sq1.__index == sq, getmetatable(sq1) == sq1 ) local sq2 = sq1:new { color = "red" } print( "sq2", sq2.x == 1, sq2.y == 0, sq2.side == 1, sq2.color == "red", sq2.new == Prototype.new, sq2.__index == sq1, getmetatable(sq2) == sq2 ) print("Begin dump of sq") for k, v in pairs(sq) do print(k, v) end print("End dump of sq") print("Begin dump of sq1") for k, v in pairs(sq1) do print(k, v) end print("End dump of sq1") print("Begin dump of sq2") for k, v in pairs(sq2) do print(k, v) end print("End dump of sq2") print("\nTesting of clone") local sq0 = Prototype:clone { x = 0, y = 0, side = 0 } print( "sq0", sq0.x == 0, sq0.y == 0, sq0.side == 0, sq0.new == Prototype.new, sq0.__index == Prototype, getmetatable(sq0) == sq0 ) local sq3 = sq:clone { x = 1, side = 1 } print( "sq3", sq3.x == 1, sq3.y == 0, sq3.side == 1, sq3.new == Prototype.new, sq3.__index == Prototype, getmetatable(sq3) == sq3 ) local sq4 = sq3:clone { color = "red" } print( "sq4", sq4.x == 1, sq4.y == 0, sq4.side == 1, sq4.color == "red", sq4.new == Prototype.new, sq4.__index == Prototype, getmetatable(sq4) == sq4 ) print("Begin dump of sq0") for k, v in pairs(sq0) do print(k, v) end print("End dump of sq0") print("Begin dump of sq3") for k, v in pairs(sq3) do print(k, v) end print("End dump of sq3") print("Begin dump of sq4") for k, v in pairs(sq4) do print(k, v) end print("End dump of sq4") print("\nTesting of clone of a delegating object") local sq5 = sq2:clone { color = "blue" } print( "sq5", sq5.x == 1, sq5.y == 0, sq5.side == 1, sq5.color == "blue", sq5.new == Prototype.new, sq5.__index == sq1, getmetatable(sq5) == sq5 ) print("Begin dump of sq5") for k, v in pairs(sq5) do print(k, v) end print("End dump of sq5")