160 lines
7.0 KiB
Plaintext
160 lines
7.0 KiB
Plaintext
local function printexpr(expr, match)
|
|
local n, e= loadstring("return ("..expr..")")
|
|
if not n then
|
|
print(e)
|
|
else
|
|
e = n()
|
|
if match and match ~= e then
|
|
print("###########################################\n["..expr.."] = "..tostring(e).." not matched for wanted "..tostring(match).."\n###########################################")
|
|
else
|
|
print("["..expr.."] = "..tostring(e))
|
|
end
|
|
end
|
|
end
|
|
|
|
function main(sysarg)
|
|
var = CCLVariant:new(5)--从数字构造
|
|
print(getmetatable(var).__mode)
|
|
|
|
--__add测试
|
|
print("----------------------------------------------------")
|
|
printexpr("var + 5", 10) --数字 + 数字 = 数字
|
|
printexpr("var + \"abc\"", "5abc") --数字 + 字符串 = 字符串
|
|
printexpr("var + CCLVariant:new(6)", 11) --数字 + 数字 = 数字
|
|
printexpr("var + CCLVariant:new(\"6\")", 11) --数字 + 数字 = 数字
|
|
printexpr("var + \"6\"", 11) --数字 + 数字 = 数字
|
|
printexpr("CCLVariant:new(\"ABC\") + CCLVariant:new(6)", "ABC6") --数字 + 字符串 = 字符串
|
|
printexpr("CCLVariant:new(\"ABC\") + CCLVariant:new(\"XYZ\")", "ABCXYZ")--字符串 + 字符串 = 字符串
|
|
|
|
--__sub测试
|
|
print("----------------------------------------------------")
|
|
printexpr("var - 2", 3)
|
|
printexpr("var - \"abc\"", 5)
|
|
printexpr("var - \"3\"", 2)
|
|
printexpr("var - CCLVariant:new(8)", -3)
|
|
printexpr("var - CCLVariant:new(\"8\")", -3)
|
|
printexpr("CCLVariant:new(\"abc\") - CCLVariant:new(8)", nil)
|
|
printexpr("CCLVariant:new(\"abc\") - CCLVariant:new(\"xyz\")", nil)
|
|
|
|
--__mul测试
|
|
print("----------------------------------------------------")
|
|
printexpr("var * 2", 10)
|
|
printexpr("var * \"abc\"", 0)
|
|
printexpr("var * \"3\"", 15)
|
|
printexpr("var * CCLVariant:new(8)", 40)
|
|
printexpr("var * CCLVariant:new(\"8\")", 40)
|
|
printexpr("CCLVariant:new(\"abc\") * CCLVariant:new(8)", nil)
|
|
printexpr("CCLVariant:new(\"abc\") * CCLVariant:new(\"xyz\")", nil)
|
|
|
|
--__div测试
|
|
print("----------------------------------------------------")
|
|
printexpr("var / 2", 2.5)
|
|
printexpr("var / \"abc\"", 0)
|
|
printexpr("var / \"3\"", 5/3)
|
|
printexpr("var / CCLVariant:new(8)", 5/8)
|
|
printexpr("var / CCLVariant:new(\"2\")", 2.5)
|
|
printexpr("CCLVariant:new(\"abc\") * CCLVariant:new(8)", nil)
|
|
printexpr("CCLVariant:new(\"abc\") * CCLVariant:new(\"xyz\")", nil)
|
|
|
|
--__mod测试
|
|
print("----------------------------------------------------")
|
|
printexpr("var % 2", 1)
|
|
printexpr("var % \"abc\"", 0)
|
|
printexpr("var % \"3\"", 2)
|
|
printexpr("var % CCLVariant:new(8)", 5)
|
|
printexpr("var % CCLVariant:new(\"8\")", 5)
|
|
printexpr("CCLVariant:new(\"abc\") % CCLVariant:new(8)", nil)
|
|
printexpr("CCLVariant:new(\"abc\") % CCLVariant:new(\"xyz\")", nil)
|
|
|
|
--__newindex测试
|
|
print("----------------------------------------------------")
|
|
var.x = 1 --设置成员
|
|
var.y = 2
|
|
var.size = { width = 100, height = 50 } --从表中设置成员
|
|
|
|
--__index测试
|
|
print("----------------------------------------------------")
|
|
printexpr("var.x..\":\"..var.y..\"/\"..var.size.width..\":\"..var.size.height") --读取成员
|
|
|
|
--[[__call测试
|
|
print("----------------------------------------------------")
|
|
var.str1 = "hellow 123"
|
|
var.uz = 55
|
|
var.uz2 = 66
|
|
var.uz = nil
|
|
var.str2 = "你好"
|
|
printexpr("var:test()")--]]
|
|
|
|
|
|
--__eq测试
|
|
print("----------------------------------------------------")
|
|
printexpr("var.x == var.y", false) --读取成员,原始原始
|
|
printexpr("CCLVariant:new(5) == CCLVariant:new(5)", true)
|
|
printexpr("CCLVariant:new(5) ~= CCLVariant:new(5)", false)
|
|
printexpr("CCLVariant:new(2) == CCLVariant:new(3)", false)
|
|
printexpr("CCLVariant:new(2) ~= CCLVariant:new(3)", true)
|
|
printexpr("CCLVariant:new(5) == 5", false) --false LUA不支持==、!=、<=、>=的不同类型之间的运算符重载
|
|
printexpr("CCLVariant:new(5) ~= 5", true)
|
|
printexpr("CCLVariant:new(3) == CCLVariant:new(\"3\")", true)
|
|
printexpr("CCLVariant:new(3) ~= CCLVariant:new(\"3\")", false)
|
|
printexpr("CCLVariant:new(3) == CCLVariant:new(\"3aa\")", false)
|
|
printexpr("CCLVariant:new(3) ~= CCLVariant:new(\"3aa\")", true)
|
|
printexpr("CCLVariant:new(\"ABC\") == CCLVariant:new(\"ABC\")", true)
|
|
printexpr("CCLVariant:new(\"ABC\") ~= CCLVariant:new(\"ABC\")", false)
|
|
printexpr("CCLVariant:new(\"ABC\") == \"ABC\"", false) --false LUA不支持==、!=、<=、>=的不同类型之间的运算符重载
|
|
printexpr("CCLVariant:new(\"ABC\") ~= \"ABC\"", true)
|
|
printexpr("CCLVariant:new(\"XYZ\") == 3", false) --false LUA不支持==、!=、<=、>=的不同类型之间的运算符重载
|
|
printexpr("CCLVariant:new(\"XYZ\") ~= 3", true)
|
|
printexpr("3 == CCLVariant:new(3)", false) --false LUA不支持==、!=、<=、>=的不同类型之间的运算符重载
|
|
printexpr("3 ~= CCLVariant:new(3)", true)
|
|
|
|
--__lt测试
|
|
print("----------------------------------------------------")
|
|
printexpr("CCLVariant:new(5) < CCLVariant:new(5)", false)
|
|
printexpr("CCLVariant:new(5) > CCLVariant:new(5)", false)
|
|
printexpr("CCLVariant:new(5) < CCLVariant:new(6)", true)
|
|
printexpr("CCLVariant:new(5) > CCLVariant:new(6)", false)
|
|
printexpr("CCLVariant:new(6) > CCLVariant:new(5)", true)
|
|
printexpr("CCLVariant:new(6) < CCLVariant:new(5)", false)
|
|
printexpr("CCLVariant:new(5) < CCLVariant:new(\"5\")", false)
|
|
printexpr("CCLVariant:new(5) > CCLVariant:new(\"5\")", false)
|
|
printexpr("CCLVariant:new(5) < CCLVariant:new(\"6\")", true)
|
|
printexpr("CCLVariant:new(5) > CCLVariant:new(\"6\")", false)
|
|
printexpr("CCLVariant:new(6) > CCLVariant:new(\"5\")", true)
|
|
printexpr("CCLVariant:new(6) < CCLVariant:new(\"5\")", false)
|
|
|
|
--__le测试
|
|
print("----------------------------------------------------")
|
|
printexpr("CCLVariant:new(5) <= CCLVariant:new(5)", true)
|
|
printexpr("CCLVariant:new(5) >= CCLVariant:new(5)", true)
|
|
printexpr("CCLVariant:new(5) <= CCLVariant:new(6)", true)
|
|
printexpr("CCLVariant:new(5) >= CCLVariant:new(6)", false)
|
|
printexpr("CCLVariant:new(6) >= CCLVariant:new(5)", true)
|
|
printexpr("CCLVariant:new(6) <= CCLVariant:new(5)", false)
|
|
printexpr("CCLVariant:new(5) <= CCLVariant:new(\"5\")", true)
|
|
printexpr("CCLVariant:new(5) >= CCLVariant:new(\"5\")", true)
|
|
printexpr("CCLVariant:new(5) <= CCLVariant:new(\"6\")", true)
|
|
printexpr("CCLVariant:new(5) >= CCLVariant:new(\"6\")", false)
|
|
printexpr("CCLVariant:new(6) >= CCLVariant:new(\"5\")", true)
|
|
printexpr("CCLVariant:new(6) <= CCLVariant:new(\"5\")", false)
|
|
|
|
--__unm测试
|
|
print("----------------------------------------------------")
|
|
printexpr("-CCLVariant:new(\"35\")", -35)
|
|
|
|
--__len测试
|
|
print("----------------------------------------------------")
|
|
printexpr("#var", 3)
|
|
|
|
--__concat测试
|
|
print("----------------------------------------------------")
|
|
printexpr("CCLVariant:new(5)..6", "56")
|
|
printexpr("CCLVariant:new(\"abcdef\")..CCLVariant:new(\"XYZ\")", "abcdefXYZ")
|
|
printexpr("CCLVariant:new(\"abcdef\")..\"123\"", "abcdef123")
|
|
printexpr("CCLVariant:new(\"abcdef\")..654", "abcdef654")
|
|
|
|
|
|
|
|
var = nil
|
|
collectgarbage("collect")
|
|
end |