Skip to content

Commit

Permalink
Merge pull request #10 from SheIITear/math
Browse files Browse the repository at this point in the history
Add math operations.
  • Loading branch information
AlenVelocity authored Mar 17, 2022
2 parents 3ebc73a + 7ecf1ef commit 86a7955
Showing 1 changed file with 78 additions and 0 deletions.
78 changes: 78 additions & 0 deletions src/std_library/math.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,15 @@ pub fn add_globals() -> Res {
globals.insert(String::from("floor"), Object::Inbuilt(floor));
globals.insert(String::from("abs"), Object::Inbuilt(abs));
globals.insert(String::from("sqrt"), Object::Inbuilt(sqrt));
globals.insert(String::from("sin"), Object::Inbuilt(sin));
globals.insert(String::from("cos"), Object::Inbuilt(cos));
globals.insert(String::from("tan"), Object::Inbuilt(tan));
globals.insert(String::from("pow"), Object::Inbuilt(pow));
globals.insert(String::from("log2"), Object::Inbuilt(log2));
globals.insert(String::from("log10"), Object::Inbuilt(log10));
globals.insert(String::from("modulo"), Object::Inbuilt(modulo));
globals.insert(String::from("Math.PI"), Object::Number(std::f64::consts::PI));
globals.insert(String::from("Math.E"), Object::Number(std::f64::consts::E));
globals.insert(String::from("MAX_INT"), Object::Number(std::f64::MAX));
globals.insert(String::from("MIN_INT"), Object::Number(std::f64::MIN));
Res {
Expand Down Expand Up @@ -45,6 +54,75 @@ pub fn round(args: Vec<Object>) -> Object {
}
}

pub fn log2(args: Vec<Object>) -> Object {
match &args[0] {
Object::Number(n) => Object::Number(n.log2()),
_ => Object::Error(format!("Argument must be a number. Got {}", args[0])),
}
}

pub fn log10(args: Vec<Object>) -> Object {
match &args[0] {
Object::Number(n) => Object::Number(n.log10()),
_ => Object::Error(format!("Argument must be a number. Got {}", args[0])),
}
}

pub fn sin(args: Vec<Object>) -> Object {
match &args[0] {
Object::Number(n) => Object::Number(n.sin()),
_ => Object::Error(format!("Argument must be a number. Got {}", args[0])),
}
}

pub fn cos(args: Vec<Object>) -> Object {
match &args[0] {
Object::Number(n) => Object::Number(n.cos()),
_ => Object::Error(format!("Argument must be a number. Got {}", args[0])),
}
}

pub fn tan(args: Vec<Object>) -> Object {
match &args[0] {
Object::Number(n) => Object::Number(n.tan()),
_ => Object::Error(format!("Argument must be a number. Got {}", args[0])),
}
}

pub fn pow(args: Vec<Object>) -> Object {
let base = match &args[0] {
Object::Number(n) => *n,
_ => 0.0,
};

let to = match &args[1] {
Object::Number(n) => *n,
_ => 0.0,
};

let result = f64::powf(base, to);
Object::Number(result)
}

pub fn modulo(args: Vec<Object>) -> Object {
let a = match &args[0] {
Object::Number(n) => *n,
_ => 0.0,
};

let b = match &args[1] {
Object::Number(n) => *n,
_ => 0.0,
};

let mut result = a % b;
result = result + b;
result = result % b;

Object::Number(result)
}


pub fn floor(args: Vec<Object>) -> Object {
match &args[0] {
Object::Number(n) => Object::Number(n.floor()),
Expand Down

0 comments on commit 86a7955

Please sign in to comment.