inf -> Infinity

This commit is contained in:
Andrew Morris
2023-03-20 11:43:56 +11:00
parent 549e7e546a
commit 904f230416
5 changed files with 35 additions and 9 deletions

View File

@@ -22,6 +22,14 @@ static TO_FIXED: NativeFunction = NativeFunction {
fn_: |this: &mut Val, params: Vec<Val>| -> Val {
match this {
Val::Number(number) => {
if number.is_infinite() {
return if number.is_sign_positive() {
Val::String(Rc::new("Infinity".to_string()))
} else {
Val::String(Rc::new("-Infinity".to_string()))
};
}
let mut precision = match params.get(0) {
Some(p) => p.to_number(),
_ => return Val::String(Rc::new(this.val_to_string())),
@@ -94,6 +102,14 @@ static VALUE_OF: NativeFunction = NativeFunction {
};
fn format_exponential(number: f64, precision: Option<usize>) -> Val {
if number.is_infinite() {
return if number.is_sign_positive() {
Val::String(Rc::new("Infinity".to_string()))
} else {
Val::String(Rc::new("-Infinity".to_string()))
};
}
let exp_format = match precision {
Some(p) => format!("{:.*e}", p, number),
None => format!("{:e}", number),

View File

@@ -96,7 +96,17 @@ impl ValTrait for Val {
Undefined => "undefined".to_string(),
Null => "null".to_string(),
Bool(b) => b.to_string(),
Number(x) => x.to_string(), // TODO: Match js's number string format
Number(x) => {
if x.is_infinite() {
if x.is_sign_positive() {
"Infinity".to_string()
} else {
"-Infinity".to_string()
}
} else {
x.to_string()
}
} // TODO: Match js's number string format
String(s) => s.to_string(),
Array(vals) => {
if vals.elements.len() == 0 {