[Space Lua] Implement math.tointeger

Signed-off-by: Matouš Jan Fialka <mjf@mjf.cz>
This commit is contained in:
Matouš Jan Fialka
2026-02-20 11:26:59 +01:00
parent 3b29aa8497
commit 559fc0b94d
2 changed files with 47 additions and 0 deletions
+21
View File
@@ -40,6 +40,27 @@ export const mathApi = new LuaTable({
}
return null;
}),
/**
* If the value x is representable as a Lua integer, returns an
* integer with that value. Otherwise returns nil.
*/
tointeger: new LuaBuiltinFunction((_sf, x?: any) => {
if (x === undefined || x === null) return null;
if (typeof x === "number") {
// plain integer
if (Number.isInteger(x)) return x;
return null;
}
if (isTaggedFloat(x)) {
// float with integer value e.g. 3.0
if (Number.isInteger(x.value)) return x.value;
return null;
}
if (typeof x === "bigint") return x;
return null;
}),
/**
* When called without arguments, returns a pseudo-random float with
* uniform distribution in the range [0,1). When called with two
+26
View File
@@ -171,3 +171,29 @@ do
assertEquals(f2, 3, "floor(8*0.49)")
assertEquals(f3, 4, "floor(9*0.5)")
end
-- math.tointeger
do
-- integers pass through unchanged
assertEquals(math.tointeger(0), 0, "tointeger(0)")
assertEquals(math.tointeger(42), 42, "tointeger(42)")
assertEquals(math.tointeger(-7), -7, "tointeger(-7)")
assertEquals(math.type(math.tointeger(1)), "integer", "tointeger result is integer")
-- float with whole value yields integer
assertEquals(math.tointeger(3.0), 3, "tointeger(3.0)")
assertEquals(math.tointeger(-1.0), -1, "tointeger(-1.0)")
assertEquals(math.type(math.tointeger(3.0)), "integer", "tointeger(3.0) type")
-- float with fractional part yields nil
assertEquals(math.tointeger(3.5), nil, "tointeger(3.5)")
assertEquals(math.tointeger(-0.1), nil, "tointeger(-0.1)")
-- non-numbers yields nil (no error)
assertEquals(math.tointeger("3"), nil, "tointeger(string)")
assertEquals(math.tointeger(nil), nil, "tointeger(nil)")
-- inf and nan yields nil
assertEquals(math.tointeger(1/0), nil, "tointeger(inf)")
assertEquals(math.tointeger(0/0), nil, "tointeger(nan)")
end