diff -r 5e115ed19e27 -r 31c4a81823eb tests/lua/staticmines.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/lua/staticmines.lua Thu Oct 05 05:20:25 2017 +0200 @@ -0,0 +1,137 @@ +--[[ Static Mines Test + +This test tests if mines are able to stand still on the ground for a very long time. 8 mines are spawned on a few girders. + +The test passes if the mines don't move for a very long time. +The test failes if any mine moves even the tiniest bit or is destroyed. + +This test case has been created as response to bug 96. +]] + +-- Max. time to test +local TEST_TIME_LIMIT = 3600000 * 5 -- 5 hours + +local hhs = {} + +function onGameInit() + + ClearGameFlags() + EnableGameFlags(gfDisableWind, gfOneClanMode) + Map = "" + Seed = 12 + Theme = "Desert" + MapGen = mgDrawn + TurnTime = -1 + Explosives = 0 + MinesNum = 0 + CaseFreq = 0 + Delay = 100 + WaterRise = 0 + HealthDecrease = 0 + AirMinesNum = 0 + + + AddTeam("Test Team", 0xFFFF00, "Statue", "Tank", "Default", "cm_test") + hhs[1] = AddHog("Test Hog", 0, 100, "cm_test") + SetGearPosition(hhs[1], 300, 1450) +end + +local mines = { + { x = 231, y = 1708}, + { x = 290, y = 1708}, + { x = 342, y = 1708}, + { x = 261, y = 1708}, + { x = 319, y = 1708}, + { x = 403, y = 1706}, + { x = 428, y = 1706}, + { x = 461, y = 1706}, + { x = 498, y = 1706}, + { x = 518, y = 1706}, +} + +function LoadGearData() + ------ GIRDER LIST ------ + PlaceGirder(290, 1718, 4) + PlaceGirder(290, 1790, 4) + PlaceGirder(452, 1716, 4) + PlaceGirder(452, 1790, 4) + + PlaceGirder(300, 1500, 4) + + ------ MINE LIST ------ + for m=1, #mines do + mines[m].gear = AddGear(mines[m].x, mines[m].y, gtMine, 0, 0, 0, 0) + end + +end + +function onGameStart() + LoadGearData() +end + +function onGearDelete(gear) + for m=#mines, 1, -1 do + if gear == mines[m] then + WriteLnToConsole(string.format("Mine %d died!", m)) + table.remove(mines, m) + end + end +end + +-- Give a short time for the mines to settle first. +local checkTimer = -5000 +local initPosCheck = false +-- Count the total times the mines managed to stand still +local totalTime = 0 +local fin = false +function onGameTick20() + if fin then + return + end + -- Infinite turn time + if TurnTimeLeft < 6000 then + TurnTimeLeft = -1 + end + checkTimer = checkTimer + 20 + if initPosCheck then + totalTime = totalTime + 20 + end + if checkTimer >= 1000 then + local failed = false + for m=1, #mines do + if not initPosCheck then + -- Position initialization + -- Save “real” x and y values after the mines have settled + local x, y = GetGearPosition(mines[m].gear) + mines[m].rx = x + mines[m].ry = y + else + -- Position check + local x, y = GetGearPosition(mines[m].gear) + local rx, ry = mines[m].rx, mines[m].ry + if not x or not y then + WriteLnToConsole(string.format("Mine %d has died!", m)) + failed = true + elseif x ~= rx or y ~= ry then + WriteLnToConsole(string.format("Mine %d has moved! Expected: (%d, %d). Actual: (%d, %d)", m, rx, ry, x, y)) + failed = true + end + end + end + if not initPosCheck then + initPosCheck = true + end + if failed then + WriteLnToConsole(string.format("Test failed. The mines managed to stand still for %d ticks.", totalTime)) + EndLuaTest(TEST_FAILED) + fin = true + return + end + end + if totalTime >= TEST_TIME_LIMIT then + WriteLnToConsole(string.format("All mines have been static for over %d ticks! Success!", TEST_TIME_LIMIT)) + EndLuaTest(TEST_SUCCESSFUL) + fin = true + return + end +end \ No newline at end of file