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)