UNPKG

godprotocol

Version:
182 lines (169 loc) 4.09 kB
import Storage from "./functions/storage"; class Num extends Storage { constructor(config, manager) { super(manager) this.config = config this.type = 'number' } call = async (name, args)=>{ let result, other, me = await this.literal(); other = args[0] && await args[0].literal() switch(name){ case '__add__': result = me + other; break; case '__sub__': result = me - other; break; case '__mul__': result = me * other; break; case '__div__': result = me / other; break; case '__exp__': result = me ** other; break; case '__floordiv__': result = Math.floor(me / other); break; case '__mod__': result = me % other; break; case '__eq__': result = me === other break; case '__ne__': result = me !== other break; case '__lt__': result = me < other break; case '__lte__': result = me <= other break; case '__gt__': result = me > other break; case '__gte__': result = me >= other break; case 'abs': result = Math.abs(me) break; case 'sqrt': result = Math.sqrt(me) break; case 'to_int': result = parseInt(me) break; case 'to_float': result = Number(me).toFixed(other) break; case 'to_string': result = me.toString() break; case 'tan': result = Math.tan(me) break; case 'sin': result = Math.sin(me) break; case 'cos': result = Math.cos(me) break; case 'atan': result = Math.atan(me) break; case 'atan2': result = Math.atan2(me) break; case 'asin': result = Math.asin(me) break; case 'acos': result = Math.acos(me) break; case 'tanh': result = Math.tanh(me) break; case 'sinh': result = Math.sinh(me) break; case 'cosh': result = Math.cosh(me) break; case 'asinh': result = Math.asinh(me) break; case 'acosh': result = Math.acosh(me) break; case 'atanh': result = Math.atanh(me) break; case 'round': if (other){ result = Number(Number(me).toFixed(other)) }else result = Math.round(me) break; case 'ceil': result = Math.ceil(me) break; case 'floor': result = Math.floor(me) break; case 'is_prime': if (me <= 1) result = false; if (me <= 3) result = true; if (me % 2 === 0 || me % 3 === 0) result = false; for (let i = 5; i * i <= me; i += 6) { if (me % i === 0 || me % (i + 2) === 0) { result = false; } } result = true; break; case 'is_odd': result = (me % 2) === 1 break case 'is_even': result = (me % 2) === 0 break case 'log': if (!other || (other === 10)) result = Math.log10(me) else if (other === Math.E){ result = Math.log(me) }else result = Math.log(me) / Math.log(other) break; case 'factorial': result = this.factorial(me) break; case 'is_perfect_square': if (me < 0) result = false; let sqrt = Math.sqrt(me); result = sqrt === Math.floor(sqrt); break case 'to_degrees': result = me * (180 / Math.PI) break; case 'to_radians': result = me * (Math.PI / 180) break; } return result; } factorial = (value)=>{ if (value === 0) return 1 return value * this.factorial(value - 1) } configs = (name)=>{ let conf = {__add__: { parameters: [{name: 'other', position: 0}] }} return conf[name] } } export default Num;