From b2f75735a17a5ad62f4c7d296bdeffcfe3879013 Mon Sep 17 00:00:00 2001 From: Blendi Date: Fri, 1 May 2026 17:30:33 +0200 Subject: [PATCH] initial commit --- init.lua | 225 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 225 insertions(+) create mode 100644 init.lua diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..be57943 --- /dev/null +++ b/init.lua @@ -0,0 +1,225 @@ +local gpu = component.list('gpu')(); +if not gpu then error("can't run without a gpu!"); end + +local screen = component.list('screen')(); +if not screen then error("can't run without a screen!"); end + +local w,h = component.invoke(gpu, 'getResolution'); + +component.invoke(gpu, "bind", screen); + +local emulog = function() end; +if debug and debug.print then emulog = debug.print end + +local tests = { + {name = "component.methods", run = function() + if not component.methods then return "FAIL" end + + local ok, val = pcall(component.methods, gpu); + if not ok then return "FAIL" end + + if not val.set or not val.setForeground or not val.setBackground then + return "FAIL" + end + + return "PASS" + end}, + {name = "component.slot", run = function() + local slot = component.slot(gpu) + + if not slot then return "FAIL" end + + return "PASS" + end}, + {name = "component.proxy", run = function() + local gpuprox = component.proxy(gpu); + + if gpuprox.address ~= gpu then return "FAIL" end + if gpuprox.slot ~= component.slot(gpu) then return "FAIL" end + if gpuprox.type ~= "gpu" then return "FAIL" end + + local methods = component.methods(gpu); + + for k,v in pairs(methods) do + if not gpuprox[k] then return "FAIL" end + end + + return "PASS" + end}, + {name = "eeprom: readable (code & data)", run = function() + local eeprom = component.list('eeprom')() + if not eeprom then return "SKIP" end + + local code = component.invoke(eeprom, 'get'); + if not code then return "FAIL" end + + local data = component.invoke(eeprom, 'getData'); + if not data then return "FAIL" end + + return "PASS" + end}, + {name = "eeprom: read & writable (code & data)", run = function() + local eeprom = component.list('eeprom')() + if not eeprom then return "SKIP" end + + local methods = component.methods(eeprom) + if not methods.isReadOnly then return "SKIP" end + + if component.invoke(eeprom, 'isReadOnly') then + return "SKIP" + end + + local code = component.invoke(eeprom, 'get'); + if not code then return "FAIL" end + + local data = component.invoke(eeprom, 'getData'); + if not data then return "FAIL" end + + local testData = "HELLO MY NAME IS BLENDI GOOSE AND I AM WRITING THIS CODE RIGHT NOW; wow what a good test message thank you, me." + + component.invoke(eeprom, 'set', testData); + if testData ~= component.invoke(eeprom, 'get') then + return "FAIL" + end + component.invoke(eeprom, 'set', code); -- don't wanna fuck up the thing lol + + component.invoke(eeprom, 'setData', testData); + if testData ~= component.invoke(eeprom, 'getData') then + return "FAIL" + end + component.invoke(eeprom, 'setData', data); + + return "PASS" + end}, + {name = "eeprom: read label", run = function() + local eeprom = component.list('eeprom')() + if not eeprom then return "SKIP" end + + local label, err = component.invoke(eeprom, 'getLabel'); + if err then return "FAIL" end + + return "PASS" + end}, + {name = "eeprom: r/w label", run = function() + local eeprom = component.list('eeprom')() + if not eeprom then return "SKIP" end + + local methods = component.methods(eeprom) + if not methods.isReadOnly then return "SKIP" end + + if component.invoke(eeprom, 'isReadOnly') then + return "SKIP" + end + + local label, err = component.invoke(eeprom, 'getLabel'); + if err then return "FAIL" end + + local testlabel = "I AM A TEST" + component.invoke(eeprom, 'setLabel', testlabel); + if testlabel ~= component.invoke(eeprom, 'getLabel') then + return "FAIL" + end + component.invoke(eeprom, 'setLabel', label) + + return "PASS" + end}, + {name = "eeprom: other methods", run = function() + local eeprom = component.list('eeprom')(); + + if not component.invoke(eeprom, 'getSize') then return "FAIL" end + if not component.invoke(eeprom, 'getDataSize') then return "FAIL" end + if not component.invoke(eeprom, 'getChecksum') then return "FAIL" end + + return "PASS" + end} +} + +local page = 1 +local selected = 1 + +local perpage = h - 1; +local pagec = math.ceil(#tests / perpage) + +function render() + component.invoke(gpu, "setForeground", 0xffffff); + component.invoke(gpu, "setBackground", 0x000000); + + component.invoke(gpu, "set", 1, 1, "Shitfucker, page " .. tostring(page) .. '/' .. tostring(pagec)); + + local pagelen = math.min(perpage, #tests - (page-1)*perpage) + + for i = 1,pagelen do + local testid = i + (page-1)*perpage + local test = tests[testid]; + + local y = i + 1; + component.invoke(gpu, "set", 1, y, string.rep(" ", w)) + component.invoke(gpu, "set", 7, y, test.name); + + local state = test.state or "TEST" + + if i == selected then + component.invoke(gpu, "setForeground", 0x000000); + component.invoke(gpu, "setBackground", 0xffffff); + end + + component.invoke(gpu, "set", 2, y, state); + + if i == selected then + component.invoke(gpu, "setForeground", 0xffffff); + component.invoke(gpu, "setBackground", 0x000000); + end + end + + for i = pagelen+1, perpage do + component.invoke(gpu, "set", 1, i+1, string.rep(" ", w)) + end +end + +while true do + render() + + local event = {computer.pullSignal(0.1)} + + if event[1] == "key_down" then + local key = event[4] + + if key == 0xcb then -- left + page = page - 1; + elseif key == 0xcd then -- right + page = page + 1; + end + + if page < 1 then page = 1 end + if page > pagec then page = pagec end + + + if key == 0xc8 then -- up + selected = selected - 1 + elseif key == 0xd0 then -- down + selected = selected + 1 + end + + local pagelen = math.min(perpage, #tests - (page-1)*perpage) + + if selected < 1 then selected = 1 end + if selected > pagelen then selected = pagelen end + + + local char = event[3] + + if char == "\r" or key == 0x1c then -- enter + local testid = selected + (page-1)*perpage + + local test = tests[testid] + + local ok, res = pcall(test.run) + if not ok then + emulog(res) + test.state = "CRASH" + else + if res then test.state = res else test.state = "FAIL" end + end + end + end +end