Skip to content

Commit e0e56fe

Browse files
authored
feat: Number.isInteger() (#1518)
1 parent 7e89bc1 commit e0e56fe

File tree

4 files changed

+13
-0
lines changed

4 files changed

+13
-0
lines changed

src/LuaLib.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ export enum LuaLibFeature {
6363
New = "New",
6464
Number = "Number",
6565
NumberIsFinite = "NumberIsFinite",
66+
NumberIsInteger = "NumberIsInteger",
6667
NumberIsNaN = "NumberIsNaN",
6768
NumberParseInt = "ParseInt",
6869
NumberParseFloat = "ParseFloat",

src/lualib/NumberIsInteger.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { __TS__NumberIsFinite } from "./NumberIsFinite";
2+
3+
/// https://tc39.es/ecma262/multipage/numbers-and-dates.html#sec-number.isinteger
4+
export function __TS__NumberIsInteger(this: void, value: unknown): boolean {
5+
return __TS__NumberIsFinite(value) && math.floor(value as number) === (value as number);
6+
}

src/transformation/builtins/number.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ export function transformNumberConstructorCall(
118118
const parameters = transformArguments(context, node.arguments);
119119
const methodName = calledMethod.name.text;
120120
switch (methodName) {
121+
case "isInteger":
122+
return transformLuaLibFunction(context, LuaLibFeature.NumberIsInteger, node, ...parameters);
121123
case "isNaN":
122124
return transformLuaLibFunction(context, LuaLibFeature.NumberIsNaN, node, ...parameters);
123125
case "isFinite":

test/unit/builtins/numbers.spec.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ describe("Number", () => {
4646
test.each(cases)("isFinite(%p)", value => {
4747
util.testExpressionTemplate`Number.isFinite(${value} as any)`.expectToMatchJsResult();
4848
});
49+
50+
test.each(cases)("isInteger(%p)", value => {
51+
util.testExpressionTemplate`Number.isInteger(${value} as any)`.expectToMatchJsResult();
52+
});
4953
});
5054

5155
const toStringRadixes = [undefined, 10, 2, 8, 9, 16, 17, 36, 36.9];

0 commit comments

Comments
 (0)