mirror of
https://github.com/fluencelabs/wasm-bindgen
synced 2025-03-16 02:00:51 +00:00
bindings for isFinite(), Number.isFinite() and Number.isSafeInteger() (#420)
* bindings for isFinite() * bindings for Number.isFiniter(), refactoring of Number.isInteger() * bindings for Number.isSafeInteger()
This commit is contained in:
parent
6561fba947
commit
6758525980
22
src/js.rs
22
src/js.rs
@ -80,6 +80,13 @@ extern "C" {
|
||||
/// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval
|
||||
#[wasm_bindgen(catch)]
|
||||
pub fn eval(js_source_text: &str) -> Result<JsValue, JsValue>;
|
||||
|
||||
/// The global isFinite() function determines whether the passed value is a finite number.
|
||||
/// If needed, the parameter is first converted to a number.
|
||||
///
|
||||
/// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isFinite
|
||||
#[wasm_bindgen(js_name = isFinite)]
|
||||
pub fn is_finite(value: &JsValue) -> bool;
|
||||
}
|
||||
|
||||
// UInt8Array
|
||||
@ -746,11 +753,24 @@ extern "C" {
|
||||
extern "C" {
|
||||
pub type Number;
|
||||
|
||||
/// The Number.isFinite() method determines whether the passed value is a finite number.
|
||||
///
|
||||
/// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite
|
||||
#[wasm_bindgen(static_method_of = Number, js_name = isFinite)]
|
||||
pub fn is_finite(value: &JsValue) -> bool;
|
||||
|
||||
/// The Number.isInteger() method determines whether the passed value is an integer.
|
||||
///
|
||||
/// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger
|
||||
#[wasm_bindgen(static_method_of = Number, js_name = isInteger)]
|
||||
pub fn is_integer(object: &Object) -> bool;
|
||||
pub fn is_integer(value: &JsValue) -> bool;
|
||||
|
||||
/// The Number.isSafeInteger() method determines whether the provided value is a number
|
||||
/// that is a safe integer.
|
||||
///
|
||||
/// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger
|
||||
#[wasm_bindgen(static_method_of = Number, js_name = isSafeInteger)]
|
||||
pub fn is_safe_integer(value: &JsValue) -> bool;
|
||||
|
||||
/// The `Number` JavaScript object is a wrapper object allowing
|
||||
/// you to work with numerical values. A `Number` object is
|
||||
|
@ -2,6 +2,36 @@
|
||||
|
||||
use super::project;
|
||||
|
||||
#[test]
|
||||
fn is_finite() {
|
||||
project()
|
||||
.file("src/lib.rs", r#"
|
||||
#![feature(proc_macro, wasm_custom_section)]
|
||||
|
||||
extern crate wasm_bindgen;
|
||||
use wasm_bindgen::prelude::*;
|
||||
use wasm_bindgen::js;
|
||||
|
||||
#[wasm_bindgen]
|
||||
pub fn is_finite(value: &JsValue) -> bool {
|
||||
js::Number::is_finite(value)
|
||||
}
|
||||
"#)
|
||||
.file("test.js", r#"
|
||||
import * as assert from "assert";
|
||||
import * as wasm from "./out";
|
||||
|
||||
export function test() {
|
||||
assert.equal(wasm.is_finite(42), true);
|
||||
assert.equal(wasm.is_finite(42.1), true);
|
||||
assert.equal(wasm.is_finite('42'), false);
|
||||
assert.equal(wasm.is_finite(NaN), false);
|
||||
assert.equal(wasm.is_finite(Infinity), false);
|
||||
}
|
||||
"#)
|
||||
.test()
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn is_integer() {
|
||||
project()
|
||||
@ -13,8 +43,8 @@ fn is_integer() {
|
||||
use wasm_bindgen::js;
|
||||
|
||||
#[wasm_bindgen]
|
||||
pub fn is_integer(obj: &js::Object) -> bool {
|
||||
js::Number::is_integer(&obj)
|
||||
pub fn is_integer(value: &JsValue) -> bool {
|
||||
js::Number::is_integer(value)
|
||||
}
|
||||
"#)
|
||||
.file("test.js", r#"
|
||||
@ -29,6 +59,38 @@ fn is_integer() {
|
||||
.test()
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn is_safe_integer() {
|
||||
project()
|
||||
.file("src/lib.rs", r#"
|
||||
#![feature(proc_macro, wasm_custom_section)]
|
||||
|
||||
extern crate wasm_bindgen;
|
||||
use wasm_bindgen::prelude::*;
|
||||
use wasm_bindgen::js;
|
||||
|
||||
#[wasm_bindgen]
|
||||
pub fn is_safe_integer(value: &JsValue) -> bool {
|
||||
js::Number::is_safe_integer(value)
|
||||
}
|
||||
"#)
|
||||
.file("test.js", r#"
|
||||
import * as assert from "assert";
|
||||
import * as wasm from "./out";
|
||||
|
||||
export function test() {
|
||||
assert.equal(wasm.is_safe_integer(42), true);
|
||||
assert.equal(wasm.is_safe_integer(Math.pow(2, 53) - 1), true);
|
||||
assert.equal(wasm.is_safe_integer(Math.pow(2, 53)), false);
|
||||
assert.equal(wasm.is_safe_integer('42'), false);
|
||||
assert.equal(wasm.is_safe_integer(42.1), false);
|
||||
assert.equal(wasm.is_safe_integer(NaN), false);
|
||||
assert.equal(wasm.is_safe_integer(Infinity), false);
|
||||
}
|
||||
"#)
|
||||
.test()
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn new() {
|
||||
project()
|
||||
|
@ -150,3 +150,39 @@ fn eval() {
|
||||
)
|
||||
.test();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn is_finite() {
|
||||
project()
|
||||
.file(
|
||||
"src/lib.rs",
|
||||
r#"
|
||||
#![feature(proc_macro, wasm_custom_section)]
|
||||
|
||||
extern crate wasm_bindgen;
|
||||
use wasm_bindgen::prelude::*;
|
||||
use wasm_bindgen::js;
|
||||
|
||||
#[wasm_bindgen]
|
||||
pub fn is_finite(value: &JsValue) -> bool {
|
||||
js::is_finite(value)
|
||||
}
|
||||
"#,
|
||||
)
|
||||
.file(
|
||||
"test.js",
|
||||
r#"
|
||||
import * as assert from "assert";
|
||||
import * as wasm from "./out";
|
||||
|
||||
export function test() {
|
||||
assert.equal(wasm.is_finite(42), true);
|
||||
assert.equal(wasm.is_finite(42.1), true);
|
||||
assert.equal(wasm.is_finite('42'), true);
|
||||
assert.equal(wasm.is_finite(NaN), false);
|
||||
assert.equal(wasm.is_finite(Infinity), false);
|
||||
}
|
||||
"#,
|
||||
)
|
||||
.test();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user