From 7aac5f35df0a4a9fb5c796fb68a30db24daec850 Mon Sep 17 00:00:00 2001 From: Kevin Alavik <95900603+KevinAlavik@users.noreply.github.com> Date: Sat, 14 Oct 2023 17:49:47 +0200 Subject: [PATCH] feat: added new math functions --- src/runtime/intrinsics/libs/std/math.ts | 65 ++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) diff --git a/src/runtime/intrinsics/libs/std/math.ts b/src/runtime/intrinsics/libs/std/math.ts index 1afc6bc8..624da623 100644 --- a/src/runtime/intrinsics/libs/std/math.ts +++ b/src/runtime/intrinsics/libs/std/math.ts @@ -15,7 +15,7 @@ export default class MathLib extends Intrinsic.Lib { public get propertyTypes(): Record { return { pi: new SingularType("float"), - e: new SingularType("float") + e: new SingularType("float"), }; } @@ -88,6 +88,69 @@ export default class MathLib extends Intrinsic.Lib { public call(n: number): number { return Math.tanh(n); } + }, + abs: class Abs extends Intrinsic.Function { + public readonly name = `${libName}.${toCamelCase(this.constructor.name)}`; + public readonly returnType = NUMBER_TYPE; + public readonly argumentTypes = { n: NUMBER_TYPE }; + + public call(n: number): number { + return Math.abs(n); + } + }, + sqrt: class Sqrt extends Intrinsic.Function { + public readonly name = `${libName}.${toCamelCase(this.constructor.name)}`; + public readonly returnType = NUMBER_TYPE; + public readonly argumentTypes = { n: NUMBER_TYPE }; + + public call(n: number): number { + return Math.sqrt(n); + } + }, + exp: class Exp extends Intrinsic.Function { + public readonly name = `${libName}.${toCamelCase(this.constructor.name)}`; + public readonly returnType = NUMBER_TYPE; + public readonly argumentTypes = { n: NUMBER_TYPE }; + + public call(n: number): number { + return Math.exp(n); + } + }, + log: class Log extends Intrinsic.Function { + public readonly name = `${libName}.${toCamelCase(this.constructor.name)}`; + public readonly returnType = NUMBER_TYPE; + public readonly argumentTypes = { n: NUMBER_TYPE, base: NUMBER_TYPE }; + + public call(n: number, base: number): number { + return Math.log(n) / Math.log(base); + } + }, + ceil: class Ceil extends Intrinsic.Function { + public readonly name = `${libName}.${toCamelCase(this.constructor.name)}`; + public readonly returnType = NUMBER_TYPE; + public readonly argumentTypes = { n: NUMBER_TYPE }; + + public call(n: number): number { + return Math.ceil(n); + } + }, + floor: class Floor extends Intrinsic.Function { + public readonly name = `${libName}.${toCamelCase(this.constructor.name)}`; + public readonly returnType = NUMBER_TYPE; + public readonly argumentTypes = { n: NUMBER_TYPE }; + + public call(n: number): number { + return Math.floor(n); + } + }, + pow: class Pow extends Intrinsic.Function { + public readonly name = `${libName}.${toCamelCase(this.constructor.name)}`; + public readonly returnType = NUMBER_TYPE; + public readonly argumentTypes = { base: NUMBER_TYPE, exp: NUMBER_TYPE }; + + public call(base: number, exp: number): number { + return Math.pow(base, exp); + } } }; }