godprotocol
Version:
A distributed computing environment
182 lines (169 loc) • 4.09 kB
JavaScript
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;