1
0
Fork 0
mirror of https://github.com/Reuh/candran.git synced 2025-10-27 17:59:30 +00:00

Candran 0.3.0

* Added @ self alias
* Added short anonymous functions declaration
* Made assignment operators works in every direction, except up, down,
behind and below, because this would be hard to visualize.
* Moved files around.
* Error rewriting.
* Discover the amazing can commandline tool, which includes a fantastic°
REPL and program running abilities.
* Added functions which plagiarize Lua.
* Added 0.1.0 to the version number.
* If you still love pineapple flavored bread, don't hesitate to show
your feelings.

Also, the tests are out of date. Sad.

°: not really.
This commit is contained in:
Étienne Fildadut 2017-08-16 22:33:44 +02:00
parent 2a1e293aa5
commit 4af2b41a0d
17 changed files with 2413 additions and 1865 deletions

145
test/test.lua Normal file
View file

@ -0,0 +1,145 @@
print("========================")
print("|| CANDRAN TESTS ||")
print("========================")
local candran = dofile(arg[1] or "../candran.lua")
-- test helper
local results = {} -- tests result
local function test(name, candranCode, result, args)
results[name] = { result = "not finished", message = "no info" }
local self = results[name]
-- make code
local success, code = pcall(candran.make, candranCode, args)
if not success then
self.result = "error"
self.message = "error while making code :\n"..code
return
end
-- load code
local success, func = pcall(loadstring or load, code)
if not success then
self.result = "error"
self.message = "error while loading code :\n"..func
return
end
-- run code
local success, output = pcall(func)
if not success then
self.result = "error"
self.message = "error while running code :\n"..output
return
end
-- check result
if output ~= result then
self.result = "fail"
self.message = "invalid result from the code; it returned "..tostring(output).." instead of "..tostring(result)
return
else
self.result = "success"
return
end
end
-- tests
print("Running tests...")
test("preprocessor", [[
#local foo = true
return true
]], true)
test("preprocessor condition", [[
#local foo = true
#if not foo then
return false
#else
return true
#end
]], true)
test("preprocessor args table", [[
#if not foo == "sky" then
# error("Invalid foo argument")
#end
return true
]], true, { foo = "sky" })
test("preprocessor write function", [[
#write("local a = true")
return a
]], true)
test("preprocessor import function", [[
#import("toInclude")
return toInclude
]], 5)
test("preprocessor include function", "a = [[\n#include('toInclude.lua')\n]]\nreturn a",
"local a = 5\nreturn a\n\n")
test("+=", [[
local a = 5
a += 2
return a
]], 7)
test("-=", [[
local a = 5
a -= 2
return a
]], 3)
test("*=", [[
local a = 5
a *= 2
return a
]], 10)
test("/=", [[
local a = 5
a /= 2
return a
]], 5/2)
test("^=", [[
local a = 5
a ^= 2
return a
]], 25)
test("%=", [[
local a = 5
a %= 2
return a
]], 5%2)
test("..=", [[
local a = "hello"
a ..= " world"
return a
]], "hello world")
test("default parameters", [[
local function test(hey, def="re", no, foo=("bar"):gsub("bar", "batru"))
return def..foo
end
return test(78, "SANDWICH", true)
]], "SANDWICHbatru")
-- results
print("=====================")
print("|| RESULTS ||")
print("=====================")
local resultCounter = {}
local testCounter = 0
for name, test in pairs(results) do
-- print errors & fails
if test.result ~= "success" then
print("Test \""..name.."\" : "..test.result)
if test.message then print(test.message) end
print("----------")
end
-- count tests results
resultCounter[test.result] = (resultCounter[test.result] or 0) + 1
testCounter = testCounter + 1
end
-- print final results
for name, count in pairs(resultCounter) do
print(count.." "..name.." (" .. math.floor((count / testCounter * 100)*100)/100 .. "%)")
end
print(testCounter.." total")