Changed lume.reduce() to support non-array tables, updated tests

This commit is contained in:
rxi 2015-02-24 21:01:03 +00:00
parent 886bd43bce
commit c3c2d31d37
2 changed files with 15 additions and 3 deletions

View File

@ -259,9 +259,18 @@ end
function lume.reduce(t, fn, first)
local acc = first or t[1]
assert(acc, "reduce of an empty array with no first value")
for i = first and 1 or 2, #t do acc = fn(acc, t[i]) end
local acc = first
local started = first and true or false
local iter = getiter(t)
for k, v in iter(t) do
if started then
acc = fn(acc, v)
else
acc = v
started = true
end
end
assert(started, "reduce of an empty table with no first value")
return acc
end

View File

@ -230,6 +230,9 @@ tests["lume.reduce"] = function()
testeq( lume.reduce({1, 2, 3, 4}, add, 5), 15 )
testeq( lume.reduce({1}, add), 1 )
testeq( lume.reduce({}, concat, "potato"), "potato" )
testeq( lume.reduce({a=1, b=2}, add, 5), 8 )
testeq( lume.reduce({a=1, b=2}, add), 3 )
tester.test.error(lume.reduce, {}, add)
end
-- lume.set