| require("import") -- the import fn |
| import("equality") -- import code |
| eq=equality -- renaming import |
| |
| -- catch "undefined" global variables |
| local env = _ENV -- Lua 5.2 |
| if not env then env = getfenv () end -- Lua 5.1 |
| setmetatable(env, {__index=function (t,i) error("undefined global variable `"..i.."'",2) end}) |
| |
| -- === No equality operator === |
| |
| -- logically same data without equality operator are not equal |
| p1 = eq.MakePoint(10,9); |
| p2 = eq.MakePoint(10,9); |
| |
| assert( p1 ~= p2 ); |
| |
| -- different wrappers for same Point* are equal |
| p3 = eq.GetZeroPointPtr() |
| p4 = eq.GetZeroPointPtr() |
| |
| assert( p3 == p4 ) |
| |
| |
| -- === Logically correct equality operator === |
| |
| ed1 = eq.EqualOpDefined(10) |
| ed2 = eq.EqualOpDefined(10) |
| ed3 = eq.EqualOpDefined(15) |
| |
| assert( ed1 == ed2 ) |
| assert( ed1 ~= ed3 ) |
| |
| |
| -- === Logically incorrect equality operator === |
| |
| ew1 = eq.EqualOpWrong() |
| ew2 = eq.EqualOpWrong() |
| |
| assert( ew1 ~= ew2 ); |
| |
| ew3 = eq.EqualOpWrong.GetStaticObject() |
| ew4 = eq.EqualOpWrong.GetStaticObject() |
| |
| -- Even though these are pointers to same object, operator== overload should |
| -- state that they are not equal |
| assert( ew3 ~= ew4 ) |