tests/lua/luaAPI/gravity_get_set.lua
author sheepluva
Mon, 05 Aug 2019 00:20:45 +0200
changeset 15300 f382ec6dba11
parent 10048 97d11e754dd2
permissions -rw-r--r--
In hindsight my emscripten-ifdef (70d416a8f63f) is nonsense. As fpcrtl_glShaderSource() would not be defined and lead to compiling issues. So either it's 3 ifdefs (in pas2cRedo, pas2cSystem and misc.c), in order to toggle between fpcrtl_ and the native function, or alternatively have no ifdef for it at all. I'm going with none at all, which means emscripten will compile with the original (const) function prototype, being wrapped by the fpcrtl_ function, same as non-emscripten builds.



-- * let grenade fall
-- * after a second capture fall distance
-- * change gravity value every second and see if the fall distance in the
--   following second is about what we'd expect it to be

local spawnX = 10
local spawnY = -500

local defaultG = nil
local currentG = nil

local defaultDY = nil
local expectedY = nil

local testGs = nil

local nFails = 0

function onGameInit()


	-- The base number for the random number generator
	Seed = 1
	-- The map to be played
	Map = "Ruler"
	-- The theme to be used
	Theme = "Bamboo"
	-- Game settings and rules
	EnableGameFlags(gfOneClanMode, gfInvulnerable)
	CaseFreq = 0
	MinesNum = 0
	Explosives = 0

	-- Create the player team
	AddTeam("O_o", 14483456, "Simple", "Island", "Default")
	-- And add a hog to it
	player = AddHog("o_O", 0, 1, "NoHat")
	SetGearPosition(player, 100, 100)
end

local tol = 0

function IsKindaSame(a, b)
	tol = 1 + math.max(1,math.abs(currentG) / 100)
	return (a >= b-tol) and (a <= b+tol)
end

function SpawnGrenade()
	AddGear(spawnX, spawnY, gtGrenade, 0, 0, 0, 1000)
end

local gIdx = 1

function onGearDelete(gear)
	if GetGearType(gear) ~= gtGrenade then
		return
	end

	-- catch initial measuring drop
	if defaultDY == nil then
		defaultDY = GetY(gear) - spawnY
	elseif not IsKindaSame(GetY(gear), expectedY) then
		nFails = nFails + 1
		WriteLnToConsole("FAIL: Unexpected Y position! " .. GetY(gear) .. " returned, expected " .. expectedY .. ' (max tolerated difference = ' .. tol .. ')')
	else
		WriteLnToConsole("Y position OK! " .. GetY(gear) .. " returned, expected " .. expectedY .. ' (max tolerated difference = ' .. tol .. ')')
	end

	returnedG = GetGravity()
	if (returnedG ~= currentG) then
		WriteLnToConsole("GetGravity did not return the value that we used with SetGravity! " .. returnedG .. " returned, expected " .. currentG)
		nFails = nFails + 1
	end

	currentG = testGs[gIdx]
	gIdx = gIdx + 1
	-- after last test
	if currentG == nil then
		if (nFails > 0) then
			EndLuaTest(TEST_FAILED)
		else
			EndLuaTest(TEST_SUCCESSFUL)
		end
	end

	WriteLnToConsole("SetGravity(" .. currentG .. ") ...")
	SetGravity(currentG)

	SpawnGrenade()
	expectedY = spawnY + math.floor(currentG * defaultDY / 100)
end

function onGameStart()
	currentG = 100
	defaultG = GetGravity()
	if (defaultG ~= 100) then
		WriteLnToConsole("GetGravity did not return 100 at game start")
		nFails = 1
	end

	SpawnGrenade()

	-- for current testing method don't use values over 400
	-- (values > 400 will cause speed cap in under 1 sec)
	testGs = {150, 200, 300, 10, 1, 13, 15, 0, 27, -350, -10, nil}
end