chore: Take Into<Value> for tests

This commit is contained in:
Nathan Adams 2019-10-21 12:44:21 +02:00
parent f24ab37810
commit 0ba9cef2f0
2 changed files with 131 additions and 121 deletions

View File

@ -121,13 +121,18 @@ mod tests {
use crate::avm1::Error;
macro_rules! test_std {
( $test: ident, $fun: expr, $version: expr, $($args: expr => $out: expr),* ) => {
( $test: ident, $fun: expr, $version: expr, $([$($arg: expr),*] => $out: expr),* ) => {
#[test]
fn $test() -> Result<(), Error> {
with_avm($version, |avm, context, this| {
$(
assert_eq!($fun(avm, context, this, $args), $out);
#[allow(unused_mut)]
let mut args: Vec<Value> = Vec::new();
$(
args.push($arg.into());
)*
assert_eq!($fun(avm, context, this, &args), $out);
)*
Ok(())
@ -137,82 +142,82 @@ mod tests {
}
test_std!(boolean_function, boolean, 19,
&[Value::Bool(true)] => Value::Bool(true),
&[Value::Bool(false)] => Value::Bool(false),
&[Value::Number(10.0)] => Value::Bool(true),
&[Value::Number(-10.0)] => Value::Bool(true),
&[Value::Number(0.0)] => Value::Bool(false),
&[Value::Number(std::f64::INFINITY)] => Value::Bool(true),
&[Value::Number(std::f64::NAN)] => Value::Bool(false),
&["".into()] => Value::Bool(false),
&["Hello".into()] => Value::Bool(true),
&[" ".into()] => Value::Bool(true),
&["0".into()] => Value::Bool(true),
&["1".into()] => Value::Bool(true),
&[] => Value::Bool(false)
[Value::Bool(true)] => Value::Bool(true),
[Value::Bool(false)] => Value::Bool(false),
[Value::Number(10.0)] => Value::Bool(true),
[Value::Number(-10.0)] => Value::Bool(true),
[Value::Number(0.0)] => Value::Bool(false),
[Value::Number(std::f64::INFINITY)] => Value::Bool(true),
[Value::Number(std::f64::NAN)] => Value::Bool(false),
[""] => Value::Bool(false),
["Hello"] => Value::Bool(true),
[" "] => Value::Bool(true),
["0"] => Value::Bool(true),
["1"] => Value::Bool(true),
[] => Value::Bool(false)
);
test_std!(boolean_function_swf6, boolean, 6,
&[Value::Bool(true)] => Value::Bool(true),
&[Value::Bool(false)] => Value::Bool(false),
&[Value::Number(10.0)] => Value::Bool(true),
&[Value::Number(-10.0)] => Value::Bool(true),
&[Value::Number(0.0)] => Value::Bool(false),
&[Value::Number(std::f64::INFINITY)] => Value::Bool(true),
&[Value::Number(std::f64::NAN)] => Value::Bool(false),
&["".into()] => Value::Bool(false),
&["Hello".into()] => Value::Bool(false),
&[" ".into()] => Value::Bool(false),
&["0".into()] => Value::Bool(false),
&["1".into()] => Value::Bool(true),
&[] => Value::Bool(false)
[Value::Bool(true)] => Value::Bool(true),
[Value::Bool(false)] => Value::Bool(false),
[Value::Number(10.0)] => Value::Bool(true),
[Value::Number(-10.0)] => Value::Bool(true),
[Value::Number(0.0)] => Value::Bool(false),
[Value::Number(std::f64::INFINITY)] => Value::Bool(true),
[Value::Number(std::f64::NAN)] => Value::Bool(false),
[""] => Value::Bool(false),
["Hello"] => Value::Bool(false),
[" "] => Value::Bool(false),
["0"] => Value::Bool(false),
["1"] => Value::Bool(true),
[] => Value::Bool(false)
);
test_std!(is_nan_function, is_nan, 19,
&[Value::Bool(true)] => Value::Bool(false),
&[Value::Bool(false)] => Value::Bool(false),
&[Value::Number(10.0)] => Value::Bool(false),
&[Value::Number(-10.0)] => Value::Bool(false),
&[Value::Number(0.0)] => Value::Bool(false),
&[Value::Number(std::f64::INFINITY)] => Value::Bool(false),
&[Value::Number(std::f64::NAN)] => Value::Bool(true),
&["".into()] => Value::Bool(false),
&["Hello".into()] => Value::Bool(true),
&[" ".into()] => Value::Bool(true),
&[" 5 ".into()] => Value::Bool(true),
&["0".into()] => Value::Bool(false),
&["1".into()] => Value::Bool(false),
&["Infinity".into()] => Value::Bool(true),
&["100a".into()] => Value::Bool(true),
&["0x10".into()] => Value::Bool(false),
&["0xhello".into()] => Value::Bool(true),
&["0x1999999981ffffff".into()] => Value::Bool(false),
&["0xUIXUIDFKHJDF012345678".into()] => Value::Bool(true),
&["123e-1".into()] => Value::Bool(false),
&[] => Value::Bool(true)
[Value::Bool(true)] => Value::Bool(false),
[Value::Bool(false)] => Value::Bool(false),
[Value::Number(10.0)] => Value::Bool(false),
[Value::Number(-10.0)] => Value::Bool(false),
[Value::Number(0.0)] => Value::Bool(false),
[Value::Number(std::f64::INFINITY)] => Value::Bool(false),
[Value::Number(std::f64::NAN)] => Value::Bool(true),
[""] => Value::Bool(false),
["Hello"] => Value::Bool(true),
[" "] => Value::Bool(true),
[" 5 "] => Value::Bool(true),
["0"] => Value::Bool(false),
["1"] => Value::Bool(false),
["Infinity"] => Value::Bool(true),
["100a"] => Value::Bool(true),
["0x10"] => Value::Bool(false),
["0xhello"] => Value::Bool(true),
["0x1999999981ffffff"] => Value::Bool(false),
["0xUIXUIDFKHJDF012345678"] => Value::Bool(true),
["123e-1"] => Value::Bool(false),
[] => Value::Bool(true)
);
test_std!(number_function, number, 19,
&[Value::Bool(true)] => Value::Number(1.0),
&[Value::Bool(false)] => Value::Number(0.0),
&[Value::Number(10.0)] => Value::Number(10.0),
&[Value::Number(-10.0)] => Value::Number(-10.0),
&[Value::Number(0.0)] => Value::Number(0.0),
&[Value::Number(std::f64::INFINITY)] => Value::Number(std::f64::INFINITY),
&[Value::Number(std::f64::NAN)] => Value::Number(std::f64::NAN),
&["".into()] => Value::Number(0.0),
&["Hello".into()] => Value::Number(std::f64::NAN),
&[" ".into()] => Value::Number(std::f64::NAN),
&[" 5 ".into()] => Value::Number(std::f64::NAN),
&["0".into()] => Value::Number(0.0),
&["1".into()] => Value::Number(1.0),
&["Infinity".into()] => Value::Number(std::f64::NAN),
&["100a".into()] => Value::Number(std::f64::NAN),
&["0x10".into()] => Value::Number(16.0),
&["0xhello".into()] => Value::Number(std::f64::NAN),
&["123e-1".into()] => Value::Number(12.3),
&["0x1999999981ffffff".into()] => Value::Number(-2113929217.0),
&["0xUIXUIDFKHJDF012345678".into()] => Value::Number(std::f64::NAN),
&[] => Value::Number(0.0)
[Value::Bool(true)] => Value::Number(1.0),
[Value::Bool(false)] => Value::Number(0.0),
[Value::Number(10.0)] => Value::Number(10.0),
[Value::Number(-10.0)] => Value::Number(-10.0),
[Value::Number(0.0)] => Value::Number(0.0),
[Value::Number(std::f64::INFINITY)] => Value::Number(std::f64::INFINITY),
[Value::Number(std::f64::NAN)] => Value::Number(std::f64::NAN),
[""] => Value::Number(0.0),
["Hello"] => Value::Number(std::f64::NAN),
[" "] => Value::Number(std::f64::NAN),
[" 5 "] => Value::Number(std::f64::NAN),
["0"] => Value::Number(0.0),
["1"] => Value::Number(1.0),
["Infinity"] => Value::Number(std::f64::NAN),
["100a"] => Value::Number(std::f64::NAN),
["0x10"] => Value::Number(16.0),
["0xhello"] => Value::Number(std::f64::NAN),
["123e-1"] => Value::Number(12.3),
["0x1999999981ffffff"] => Value::Number(-2113929217.0),
["0xUIXUIDFKHJDF012345678"] => Value::Number(std::f64::NAN),
[] => Value::Number(0.0)
);
}

View File

@ -125,7 +125,7 @@ mod tests {
use crate::avm1::Error;
macro_rules! test_std {
( $test: ident, $name: expr, $($args: expr => $out: expr),* ) => {
( $test: ident, $name: expr, $([$($arg: expr),*] => $out: expr),* ) => {
#[test]
fn $test() -> Result<(), Error> {
with_avm(19, |avm, context, _root| {
@ -133,7 +133,12 @@ mod tests {
let function = math.read().get($name, avm, context, math);
$(
assert_eq!(function.call(avm, context, math, $args)?, Some($out));
#[allow(unused_mut)]
let mut args: Vec<Value> = Vec::new();
$(
args.push($arg.into());
)*
assert_eq!(function.call(avm, context, math, &args)?, Some($out));
)*
Ok(())
@ -143,88 +148,88 @@ mod tests {
}
test_std!(test_abs, "abs",
&[] => Value::Number(NAN),
&[Value::Null] => Value::Number(NAN),
&[Value::Number(-50.0)] => Value::Number(50.0),
&[Value::Number(25.0)] => Value::Number(25.0)
[] => Value::Number(NAN),
[Value::Null] => Value::Number(NAN),
[Value::Number(-50.0)] => Value::Number(50.0),
[Value::Number(25.0)] => Value::Number(25.0)
);
test_std!(test_acos, "acos",
&[] => Value::Number(NAN),
&[Value::Null] => Value::Number(NAN),
&[Value::Number(-1.0)] => Value::Number(f64::acos(-1.0)),
&[Value::Number(0.0)] => Value::Number(f64::acos(0.0)),
&[Value::Number(1.0)] => Value::Number(f64::acos(1.0))
[] => Value::Number(NAN),
[Value::Null] => Value::Number(NAN),
[Value::Number(-1.0)] => Value::Number(f64::acos(-1.0)),
[Value::Number(0.0)] => Value::Number(f64::acos(0.0)),
[Value::Number(1.0)] => Value::Number(f64::acos(1.0))
);
test_std!(test_asin, "asin",
&[] => Value::Number(NAN),
&[Value::Null] => Value::Number(NAN),
&[Value::Number(-1.0)] => Value::Number(f64::asin(-1.0)),
&[Value::Number(0.0)] => Value::Number(f64::asin(0.0)),
&[Value::Number(1.0)] => Value::Number(f64::asin(1.0))
[] => Value::Number(NAN),
[Value::Null] => Value::Number(NAN),
[Value::Number(-1.0)] => Value::Number(f64::asin(-1.0)),
[Value::Number(0.0)] => Value::Number(f64::asin(0.0)),
[Value::Number(1.0)] => Value::Number(f64::asin(1.0))
);
test_std!(test_atan, "atan",
&[] => Value::Number(NAN),
&[Value::Null] => Value::Number(NAN),
&[Value::Number(-1.0)] => Value::Number(f64::atan(-1.0)),
&[Value::Number(0.0)] => Value::Number(f64::atan(0.0)),
&[Value::Number(1.0)] => Value::Number(f64::atan(1.0))
[] => Value::Number(NAN),
[Value::Null] => Value::Number(NAN),
[Value::Number(-1.0)] => Value::Number(f64::atan(-1.0)),
[Value::Number(0.0)] => Value::Number(f64::atan(0.0)),
[Value::Number(1.0)] => Value::Number(f64::atan(1.0))
);
test_std!(test_ceil, "ceil",
&[] => Value::Number(NAN),
&[Value::Null] => Value::Number(NAN),
&[Value::Number(12.5)] => Value::Number(13.0)
[] => Value::Number(NAN),
[Value::Null] => Value::Number(NAN),
[Value::Number(12.5)] => Value::Number(13.0)
);
test_std!(test_cos, "cos",
&[] => Value::Number(NAN),
&[Value::Null] => Value::Number(NAN),
&[Value::Number(0.0)] => Value::Number(1.0),
&[Value::Number(std::f64::consts::PI)] => Value::Number(f64::cos(std::f64::consts::PI))
[] => Value::Number(NAN),
[Value::Null] => Value::Number(NAN),
[Value::Number(0.0)] => Value::Number(1.0),
[Value::Number(std::f64::consts::PI)] => Value::Number(f64::cos(std::f64::consts::PI))
);
test_std!(test_exp, "exp",
&[] => Value::Number(NAN),
&[Value::Null] => Value::Number(NAN),
&[Value::Number(1.0)] => Value::Number(f64::exp(1.0)),
&[Value::Number(2.0)] => Value::Number(f64::exp(2.0))
[] => Value::Number(NAN),
[Value::Null] => Value::Number(NAN),
[Value::Number(1.0)] => Value::Number(f64::exp(1.0)),
[Value::Number(2.0)] => Value::Number(f64::exp(2.0))
);
test_std!(test_floor, "floor",
&[] => Value::Number(NAN),
&[Value::Null] => Value::Number(NAN),
&[Value::Number(12.5)] => Value::Number(12.0)
[] => Value::Number(NAN),
[Value::Null] => Value::Number(NAN),
[Value::Number(12.5)] => Value::Number(12.0)
);
test_std!(test_round, "round",
&[] => Value::Number(NAN),
&[Value::Null] => Value::Number(NAN),
&[Value::Number(12.5)] => Value::Number(13.0),
&[Value::Number(23.2)] => Value::Number(23.0)
[] => Value::Number(NAN),
[Value::Null] => Value::Number(NAN),
[Value::Number(12.5)] => Value::Number(13.0),
[Value::Number(23.2)] => Value::Number(23.0)
);
test_std!(test_sin, "sin",
&[] => Value::Number(NAN),
&[Value::Null] => Value::Number(NAN),
&[Value::Number(0.0)] => Value::Number(f64::sin(0.0)),
&[Value::Number(std::f64::consts::PI / 2.0)] => Value::Number(f64::sin(std::f64::consts::PI / 2.0))
[] => Value::Number(NAN),
[Value::Null] => Value::Number(NAN),
[Value::Number(0.0)] => Value::Number(f64::sin(0.0)),
[Value::Number(std::f64::consts::PI / 2.0)] => Value::Number(f64::sin(std::f64::consts::PI / 2.0))
);
test_std!(test_sqrt, "sqrt",
&[] => Value::Number(NAN),
&[Value::Null] => Value::Number(NAN),
&[Value::Number(0.0)] => Value::Number(f64::sqrt(0.0)),
&[Value::Number(5.0)] => Value::Number(f64::sqrt(5.0))
[] => Value::Number(NAN),
[Value::Null] => Value::Number(NAN),
[Value::Number(0.0)] => Value::Number(f64::sqrt(0.0)),
[Value::Number(5.0)] => Value::Number(f64::sqrt(5.0))
);
test_std!(test_tan, "tan",
&[] => Value::Number(NAN),
&[Value::Null] => Value::Number(NAN),
&[Value::Number(0.0)] => Value::Number(f64::tan(0.0)),
&[Value::Number(1.0)] => Value::Number(f64::tan(1.0))
[] => Value::Number(NAN),
[Value::Null] => Value::Number(NAN),
[Value::Number(0.0)] => Value::Number(f64::tan(0.0)),
[Value::Number(1.0)] => Value::Number(f64::tan(1.0))
);
#[test]