|Portada|Blog|Wiki|
function test_range(n, times)
    local arr, res = {}, {}
    local times_res = {}
    for i = 1, n do arr[i] = math.random() end
    for t = 1, times do
        local sum = 0
        local t1 = os.clock()
        for j = 1, 1000 do
            for i = 1, n do
                sum = sum + arr[i]
            end
        end
        local t2 = os.clock() - t1
        res[#res+1] = sum
        times_res[#times_res+1] = 1e9 * t2 / n / 1000
    end
    return times_res, res
end

function test_ipairs(n, times)
    local arr, res = {}, {}
    local times_res = {}
    for i = 1, n do arr[i] = math.random() end
    for t = 1, times do
        local sum = 0
        local t1 = os.clock()
        for j = 1, 1000 do
            for i, v in ipairs(arr) do
                sum = sum + v
            end
        end
        local t2 = os.clock() - t1
        res[#res+1] = sum
        times_res[#times_res+1] = 1e9 * t2 / n / 1000
    end
    return times_res, res
end

function test_pairs(n, times)
    local arr, res = {}, {}
    local times_res = {}
    for i = 1, n do arr[i] = math.random() end
    for t = 1, times do
        local sum = 0
        local t1 = os.clock()
        for j = 1, 1000 do
            for i, v in pairs(arr) do
                sum = sum + v
            end
        end
        local t2 = os.clock() - t1
        res[#res+1] = sum
        times_res[#times_res+1] = 1e9 * t2 / n / 1000
    end
    return times_res, res
end

function stats(datas)
    local res = {sum=0}
    for k, v in ipairs(datas) do
        if not res.min or v < res.min then res.min = v end
        if not res.max or v > res.max then res.max = v end
        res.sum = res.sum + v
    end
    res.avg = res.sum / #datas
    return res
end

local st = stats(test_pairs(1000, 100))
print('time in ns/#t', st.min, st.avg, st.max)