--[[ Movable and Named Objects Test Driver Improved Version Using Modules H. Conrad Cunningham, Professor Computer and Information Science University of Mississippi Developed for CSci 658, Software Language Engineering, Fall 2013 Revised for CSci 450, Org. of Programming Languages, Fall 2016 1234567890123456789012345678901234567890123456789012345678901234567890 2013-10-09: Moved example code to module and separated this test driver 2016-10-19: Corrected reference to mv.VECTOR --]] -- Load Improved Movable Objects and Names Module local mv = require "movable2" -- Local names for convenience local Vector, Movable, Point = mv.Vector, mv.Movable, mv.Point local Figure, Line, Circle = mv.Figure, mv.Line, mv.Circle local MovableList, MovableName = mv.MovableList, mv.MovableName local Named, Name = mv.Named, mv.Name local makeClass, isInstanceOf = mv.makeClass, mv.isInstanceOf -- Function "show_data" converts raw Lua data structures to strings to -- assist in debugging and testing. This is borrowed from the Complex -- Number package. local function show_data(d) if type(d) == "table" then local res = {} for k,v in pairs(d) do res[#res+1] = "[" .. show_data(k) .. "] = " .. show_data(v) end return "(" .. table.concat(res, ", ") .. ")" else return tostring(d) end end -- Some PRELIMINARY testing code print("\nTest data for Figures") local disp = Vector:make(10.0, 10.0) print("disp == " .. disp:toString()) print("isInstanceOf(disp,VECTOR) == " .. tostring(isInstanceOf(disp,mv.VECTOR))) local origin = Point:make(0.0,0.0) print("origin == " .. origin:toString()) local unit = Point:make(1.0,1.0) print("unit == " .. unit:toString()) local diag = Line:make(origin,unit) print("diag == " .. diag:toString()) local circ02 = Circle:make(origin,2.0) print("circ02 == " .. circ02:toString()) local circ12 = Circle:make(unit,2.0) print("circ12 == " .. circ12:toString()) local list = {diag,circ12,unit} print("list == " .. show_data(list)) local mlist = MovableList:make(list) print("mlist == " .. mlist:toString()) -- Test Point's Movable methods print("\nTesting Movable methods of Point") print("disp == " .. disp:toString()) print("origin == " .. origin:toString()) print("unit == " .. unit:toString()) print("origin:move(disp) == " .. (origin:move(disp)):toString()) print("unit:reflectX() == " .. (unit:reflectX()):toString()) print("unit:reflectY() == " .. (unit:reflectY()):toString()) print("unit:rotate180() == " .. (unit:rotate180()):toString()) -- Test Line's Movable methods print("\nTesting Movable methods of Line") print("disp == " .. disp:toString() ) print("diag == " .. diag:toString() ) print("diag:move(disp) == " .. (diag:move(disp)):toString() ) print("diag:reflectX() == " .. (diag:reflectX()):toString() ) print("diag:reflectY() == " .. (diag:reflectY()):toString() ) print("diag:rotate180() == " .. (diag:rotate180()):toString() ) -- Test Circle Movable methods print("\nTesting Movable methods of Circle") print("disp == " .. disp:toString() ) print("circ02 == " .. circ02:toString() ) print("circ12 == " .. circ12:toString() ) print("circ02:move(disp) == " .. (circ02:move(disp)):toString() ) print("circ12:reflectX() == " .. (circ12:reflectX():toString()) ) print("circ12:reflectY() == " .. (circ12:reflectY()):toString() ) print("circ12:rotate180() == " .. (circ12:rotate180()):toString() ) -- Test MovableList Movable methods print("\nTesting Movable methods of MovableList") print("disp == " .. disp:toString()) print("mlist == " .. mlist:toString()) print("mlist:move(disp) == " .. (mlist:move(disp)):toString() ) print("diag:reflectX() == " .. (diag:reflectX()):toString() ) print("diag:reflectY() == " .. (diag:reflectY()):toString() ) print("diag:rotate180() == " .. (diag:rotate180()):toString() ) print("mlist:reflectX() == " .. (mlist:reflectX()):toString() ) print("mlist:reflectY() == " .. (mlist:reflectY()):toString() ) print("mlist:rotate180() == " .. (mlist:rotate180()):toString() ) -- Test Name's Named methods print("\nTesting Named methods of Name") local aa = Name:make("AA",unit) print("aa == " .. aa:toString() ) print("aa:lookName() == " .. aa:lookName() ) local bb = aa:giveName("BB") print("aa:giveName(\"BB\") == " .. bb:toString() ) --Test Movable methods of MovableName print("\nTesting Movable methods of MovableName") print("disp == " .. disp:toString()) local mn = MovableName:make(Name:make("zzz",unit)) print("mn == " .. mn:toString()) print("mn:move(disp) == " .. (mn:move(disp)):toString() ) print("mn:reflectX() == " .. (mn:reflectX()):toString() ) print("mn:reflectY() == " .. (mn:reflectY()):toString() ) print("mn:rotate180() == " .. (mn:rotate180()):toString() ) -- Test Named methods of MovableName using conversions print("\nTesting Named methods of MovableName") print("aa == " .. aa:toString() ) print("mn == " .. mn:toString() ) print("mn:lookName() == " .. (mn:lookName()) ) local newname = mn:giveName("BB") print("mn:giveName(\"BB\") == " .. (mn:giveName("BB")):toString()) print("newname above == " .. newname:toString() )