Files
FlexLove/testing/__tests__/performance_instrumentation_test.lua
2025-11-17 17:41:01 -05:00

168 lines
4.6 KiB
Lua

-- Test Performance Instrumentation
package.path = package.path .. ";./?.lua;./modules/?.lua"
local luaunit = require("testing.luaunit")
local loveStub = require("testing.loveStub")
-- Set up stub before requiring modules
_G.love = loveStub
local Performance = require("modules.Performance")
TestPerformanceInstrumentation = {}
function TestPerformanceInstrumentation:setUp()
Performance.reset()
Performance.enable()
end
function TestPerformanceInstrumentation:tearDown()
Performance.disable()
Performance.reset()
end
function TestPerformanceInstrumentation:testTimerStartStop()
Performance.startTimer("test_operation")
-- Simulate some work
local sum = 0
for i = 1, 1000 do
sum = sum + i
end
local elapsed = Performance.stopTimer("test_operation")
luaunit.assertNotNil(elapsed)
luaunit.assertTrue(elapsed >= 0)
local metrics = Performance.getMetrics()
luaunit.assertNotNil(metrics.timings["test_operation"])
luaunit.assertEquals(metrics.timings["test_operation"].count, 1)
end
function TestPerformanceInstrumentation:testMultipleTimers()
-- Start multiple timers
Performance.startTimer("layout")
Performance.startTimer("render")
local sum = 0
for i = 1, 100 do sum = sum + i end
Performance.stopTimer("layout")
Performance.stopTimer("render")
local metrics = Performance.getMetrics()
luaunit.assertNotNil(metrics.timings["layout"])
luaunit.assertNotNil(metrics.timings["render"])
end
function TestPerformanceInstrumentation:testFrameTiming()
Performance.startFrame()
-- Simulate frame work
local sum = 0
for i = 1, 1000 do
sum = sum + i
end
Performance.endFrame()
local frameMetrics = Performance.getFrameMetrics()
luaunit.assertNotNil(frameMetrics)
luaunit.assertEquals(frameMetrics.frameCount, 1)
luaunit.assertTrue(frameMetrics.lastFrameTime >= 0)
end
function TestPerformanceInstrumentation:testDrawCallCounting()
Performance.incrementCounter("draw_calls", 1)
Performance.incrementCounter("draw_calls", 1)
Performance.incrementCounter("draw_calls", 1)
local counter = Performance.getFrameCounter("draw_calls")
luaunit.assertEquals(counter, 3)
-- Reset and check
Performance.resetFrameCounters()
counter = Performance.getFrameCounter("draw_calls")
luaunit.assertEquals(counter, 0)
end
function TestPerformanceInstrumentation:testHUDToggle()
luaunit.assertFalse(Performance.getConfig().hudEnabled)
Performance.toggleHUD()
luaunit.assertTrue(Performance.getConfig().hudEnabled)
Performance.toggleHUD()
luaunit.assertFalse(Performance.getConfig().hudEnabled)
end
function TestPerformanceInstrumentation:testEnableDisable()
Performance.enable()
luaunit.assertTrue(Performance.isEnabled())
Performance.disable()
luaunit.assertFalse(Performance.isEnabled())
-- Timers should not record when disabled
Performance.startTimer("disabled_test")
local elapsed = Performance.stopTimer("disabled_test")
luaunit.assertNil(elapsed)
end
function TestPerformanceInstrumentation:testMeasureFunction()
local function expensiveOperation(n)
local sum = 0
for i = 1, n do
sum = sum + i
end
return sum
end
local wrapped = Performance.measure("expensive_op", expensiveOperation)
local result = wrapped(1000)
luaunit.assertEquals(result, 500500) -- sum of 1 to 1000
local metrics = Performance.getMetrics()
luaunit.assertNotNil(metrics.timings["expensive_op"])
luaunit.assertEquals(metrics.timings["expensive_op"].count, 1)
end
function TestPerformanceInstrumentation:testMemoryTracking()
Performance.updateMemory()
local memMetrics = Performance.getMemoryMetrics()
luaunit.assertNotNil(memMetrics)
luaunit.assertTrue(memMetrics.currentKb > 0)
luaunit.assertTrue(memMetrics.currentMb > 0)
luaunit.assertTrue(memMetrics.peakKb >= memMetrics.currentKb)
end
function TestPerformanceInstrumentation:testExportJSON()
Performance.startTimer("test_op")
Performance.stopTimer("test_op")
local json = Performance.exportJSON()
luaunit.assertNotNil(json)
luaunit.assertTrue(string.find(json, "fps") ~= nil)
luaunit.assertTrue(string.find(json, "test_op") ~= nil)
end
function TestPerformanceInstrumentation:testExportCSV()
Performance.startTimer("test_op")
Performance.stopTimer("test_op")
local csv = Performance.exportCSV()
luaunit.assertNotNil(csv)
luaunit.assertTrue(string.find(csv, "Name,Average") ~= nil)
luaunit.assertTrue(string.find(csv, "test_op") ~= nil)
end
-- Run tests if executed directly
if arg and arg[0]:find("performance_instrumentation_test%.lua$") then
os.exit(luaunit.LuaUnit.run())
end
return TestPerformanceInstrumentation