summaryrefslogtreecommitdiff
path: root/Data/BuiltIn/Libraries/luafun/tests/basic.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Data/BuiltIn/Libraries/luafun/tests/basic.lua')
-rw-r--r--Data/BuiltIn/Libraries/luafun/tests/basic.lua332
1 files changed, 332 insertions, 0 deletions
diff --git a/Data/BuiltIn/Libraries/luafun/tests/basic.lua b/Data/BuiltIn/Libraries/luafun/tests/basic.lua
new file mode 100644
index 0000000..97e7aae
--- /dev/null
+++ b/Data/BuiltIn/Libraries/luafun/tests/basic.lua
@@ -0,0 +1,332 @@
+--------------------------------------------------------------------------------
+-- iter
+--------------------------------------------------------------------------------
+
+--
+-- Arrays
+--
+
+for _it, a in iter({1, 2, 3}) do print(a) end
+--[[test
+1
+2
+3
+--test]]
+
+for _it, a in iter(iter(iter({1, 2, 3}))) do print(a) end
+--[[test
+1
+2
+3
+--test]]
+
+for _it, a in wrap(wrap(iter({1, 2, 3}))) do print(a) end
+--[[test
+1
+2
+3
+--test]]
+
+for _it, a in wrap(wrap(ipairs({1, 2, 3}))) do print(a) end
+--[[test
+1
+2
+3
+--test]]
+
+for _it, a in iter({}) do print(a) end
+--[[test
+--test]]
+
+for _it, a in iter(iter(iter({}))) do print(a) end
+--[[test
+--test]]
+
+for _it, a in wrap(wrap(iter({}))) do print(a) end
+--[[test
+--test]]
+
+for _it, a in wrap(wrap(ipairs({}))) do print(a) end
+--[[test
+--test]]
+
+-- Check that ``iter`` for arrays is equivalent to ``ipairs``
+local t = {1, 2, 3}
+gen1, param1, state1 = iter(t):unwrap()
+gen2, param2, state2 = ipairs(t)
+print(gen1 == gen2, param1 == param2, state1 == state2)
+--[[test
+true true true
+--test]]
+
+-- Test that ``wrap`` do nothing for wrapped iterators
+gen1, param1, state1 = iter({1, 2, 3})
+gen2, param2, state2 = wrap(gen1, param1, state1):unwrap()
+print(gen1 == gen2, param1 == param2, state1 == state2)
+--[[test
+true true true
+--test]]
+
+--
+-- Maps
+--
+
+local t = {}
+for _it, k, v in iter({ a = 1, b = 2, c = 3}) do t[#t + 1] = k end
+table.sort(t)
+for _it, v in iter(t) do print(v) end
+--[[test
+a
+b
+c
+--test]]
+
+local t = {}
+for _it, k, v in iter(iter(iter({ a = 1, b = 2, c = 3}))) do t[#t + 1] = k end
+table.sort(t)
+for _it, v in iter(t) do print(v) end
+--[[test
+a
+b
+c
+--test]]
+
+for _it, k, v in iter({}) do print(k, v) end
+--[[test
+--test]]
+
+for _it, k, v in iter(iter(iter({}))) do print(k, v) end
+--[[test
+--test]]
+
+--
+-- String
+--
+
+for _it, a in iter("abcde") do print(a) end
+--[[test
+a
+b
+c
+d
+e
+--test]]
+
+for _it, a in iter(iter(iter("abcde"))) do print(a) end
+--[[test
+a
+b
+c
+d
+e
+--test]]
+
+for _it, a in iter("") do print(a) end
+--[[test
+--test]]
+
+for _it, a in iter(iter(iter(""))) do print(a) end
+--[[test
+--test]]
+
+--
+-- Custom generators
+--
+
+local function mypairs_gen(max, state)
+ if (state >= max) then
+ return nil
+ end
+ return state + 1, state + 1
+end
+
+local function mypairs(max)
+ return mypairs_gen, max, 0
+end
+
+for _it, a in iter(mypairs(10)) do print(a) end
+--[[test
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+--test]]
+
+--
+-- Invalid values
+--
+
+for _it, a in iter(1) do print(a) end
+--[[test
+error: object 1 of type "number" is not iterable
+--test]]
+
+for _it, a in iter(1, 2, 3, 4, 5, 6, 7) do print(a) end
+--[[test
+error: object 1 of type "number" is not iterable
+--test]]
+
+--------------------------------------------------------------------------------
+-- each
+--------------------------------------------------------------------------------
+
+each(print, {1, 2, 3})
+--[[test
+1
+2
+3
+--test]]
+
+each(print, iter({1, 2, 3}))
+--[[test
+1
+2
+3
+--test]]
+
+each(print, {})
+--[[test
+--test]]
+
+
+each(print, iter({}))
+--[[test
+--test]]
+
+local keys, vals = {}, {}
+each(function(k, v)
+ keys[#keys + 1] = k
+ vals[#vals + 1] = v
+end, { a = 1, b = 2, c = 3})
+table.sort(keys)
+table.sort(vals)
+each(print, keys)
+each(print, vals)
+--[[test
+a
+b
+c
+1
+2
+3
+--test]]
+
+each(print, "abc")
+--[[test
+a
+b
+c
+--test]]
+
+each(print, iter("abc"))
+--[[test
+a
+b
+c
+--test]]
+
+print(for_each == each) -- an alias
+--[[test
+true
+--test]]
+
+print(foreach == each) -- an alias
+--[[test
+true
+--test]]
+
+--------------------------------------------------------------------------------
+-- totable
+--------------------------------------------------------------------------------
+
+local tab = totable(range(5))
+print(type(tab), #tab)
+each(print, tab)
+--[[test
+table 5
+1
+2
+3
+4
+5
+--test]]
+
+local tab = totable(range(0))
+print(type(tab), #tab)
+--[[test
+table 0
+--test]]
+
+local tab = totable("abcdef")
+print(type(tab), #tab)
+each(print, tab)
+--[[test
+table 6
+a
+b
+c
+d
+e
+f
+--test]]
+
+local unpack = rawget(table, "unpack") or unpack
+local tab = totable({ 'a', {'b', 'c'}, {'d', 'e', 'f'}})
+print(type(tab), #tab)
+each(print, tab[1])
+each(print, map(unpack, drop(1, tab)))
+--[[test
+table 3
+a
+b c
+d e f
+--test]]
+
+--------------------------------------------------------------------------------
+-- tomap
+--------------------------------------------------------------------------------
+
+local tab = tomap(zip(range(1, 7), 'abcdef'))
+print(type(tab), #tab)
+each(print, iter(tab))
+--[[test
+table 6
+a
+b
+c
+d
+e
+f
+--test]]
+
+local tab = tomap({a = 1, b = 2, c = 3})
+print(type(tab), #tab)
+local t = {}
+for _it, k, v in iter(tab) do t[v] = k end
+table.sort(t)
+for k, v in ipairs(t) do print(k, v) end
+--[[test
+table 0
+1 a
+2 b
+3 c
+--test]]
+
+local tab = tomap(enumerate("abcdef"))
+print(type(tab), #tab)
+each(print, tab)
+--[[test
+table 6
+a
+b
+c
+d
+e
+f
+--test]]