-- SPDX-FileCopyrightText: 2020 The CC: Tweaked Developers
--
-- SPDX-License-Identifier: MPL-2.0

local function log(msg)
    print(msg)
    if assertion then assertion.log(msg) end
end

local function run(name, n, f, ...)
    sleep(0)
    local s = os.epoch("utc")
    for _ = 1, n do f(...) end
    local e = os.epoch("utc") - s
    log(("%10s %.2fs %.fop/s"):format(name, e*1e-3, n/e))
end

local function run5(...) for _ = 1, 5 do run(...) end end

local native = term.native()
local x, y = native.getCursorPos()

log("Starting the benchmark")
run5("redstone.getAnalogInput", 1e7, redstone.getAnalogInput, "top")
run5("term.getCursorPos", 2e7, native.getCursorPos)
run5("term.setCursorPos", 2e7, native.setCursorPos, x, y)

if assertion then assertion.assert(true) end
