diff --git a/core/src/avm1/globals.rs b/core/src/avm1/globals.rs index 665321cd9..a4c5590d2 100644 --- a/core/src/avm1/globals.rs +++ b/core/src/avm1/globals.rs @@ -245,103 +245,112 @@ mod tests { use crate::avm1::Error; macro_rules! test_std { - ( $test: ident, $fun: expr, $version: expr, $([$($arg: expr),*] => $out: expr),* ) => { + ( $test: ident, $fun: expr, $($versions: expr => { $([$($arg: expr),*] => $out: expr),* }),* ) => { #[test] fn $test() -> Result<(), Error> { - with_avm($version, |avm, context, this| { + $( + for version in &$versions { + with_avm(*version, |avm, context, this| { - $( - #[allow(unused_mut)] - let mut args: Vec = Vec::new(); - $( - args.push($arg.into()); - )* - assert_eq!($fun(avm, context, this, &args).unwrap(), ReturnValue::Immediate($out.into())); - )* + $( + #[allow(unused_mut)] + let mut args: Vec = Vec::new(); + $( + args.push($arg.into()); + )* + assert_eq!($fun(avm, context, this, &args).unwrap(), ReturnValue::Immediate($out.into()), "{:?} => {:?} in swf {}", args, $out, version); + )* + }); + } + )* - Ok(()) - }) + Ok(()) } }; } - test_std!(boolean_function, boolean, 19, - [true] => true, - [false] => false, - [10.0] => true, - [-10.0] => true, - [0.0] => false, - [std::f64::INFINITY] => true, - [std::f64::NAN] => false, - [""] => false, - ["Hello"] => true, - [" "] => true, - ["0"] => true, - ["1"] => true, - [] => false + test_std!(boolean_function, boolean, + [19] => { + [true] => true, + [false] => false, + [10.0] => true, + [-10.0] => true, + [0.0] => false, + [std::f64::INFINITY] => true, + [std::f64::NAN] => false, + [""] => false, + ["Hello"] => true, + [" "] => true, + ["0"] => true, + ["1"] => true, + [] => false + }, + [6] => { + [true] => true, + [false] => false, + [10.0] => true, + [-10.0] => true, + [0.0] => false, + [std::f64::INFINITY] => true, + [std::f64::NAN] => false, + [""] => false, + ["Hello"] => false, + [" "] => false, + ["0"] => false, + ["1"] => true, + [] => false + } ); - test_std!(boolean_function_swf6, boolean, 6, - [true] => true, - [false] => false, - [10.0] => true, - [-10.0] => true, - [0.0] => false, - [std::f64::INFINITY] => true, - [std::f64::NAN] => false, - [""] => false, - ["Hello"] => false, - [" "] => false, - ["0"] => false, - ["1"] => true, - [] => false + test_std!(is_nan_function, is_nan, + [19] => { + [true] => false, + [false] => false, + [10.0] => false, + [-10.0] => false, + [0.0] => false, + [std::f64::INFINITY] => false, + [std::f64::NAN] => true, + [""] => false, + ["Hello"] => true, + [" "] => true, + [" 5 "] => true, + ["0"] => false, + ["1"] => false, + ["Infinity"] => true, + ["100a"] => true, + ["0x10"] => false, + ["0xhello"] => true, + ["0x1999999981ffffff"] => false, + ["0xUIXUIDFKHJDF012345678"] => true, + ["123e-1"] => false, + [] => true + } ); - test_std!(is_nan_function, is_nan, 19, - [true] => false, - [false] => false, - [10.0] => false, - [-10.0] => false, - [0.0] => false, - [std::f64::INFINITY] => false, - [std::f64::NAN] => true, - [""] => false, - ["Hello"] => true, - [" "] => true, - [" 5 "] => true, - ["0"] => false, - ["1"] => false, - ["Infinity"] => true, - ["100a"] => true, - ["0x10"] => false, - ["0xhello"] => true, - ["0x1999999981ffffff"] => false, - ["0xUIXUIDFKHJDF012345678"] => true, - ["123e-1"] => false, - [] => true - ); - - test_std!(number_function, number, 19, - [true] => 1.0, - [false] => 0.0, - [10.0] => 10.0, - [-10.0] => -10.0, - [0.0] => 0.0, - [std::f64::INFINITY] => std::f64::INFINITY, - [std::f64::NAN] => std::f64::NAN, - [""] => 0.0, - ["Hello"] => std::f64::NAN, - [" "] => std::f64::NAN, - [" 5 "] => std::f64::NAN, - ["0"] => 0.0, - ["1"] => 1.0, - ["Infinity"] => std::f64::NAN, - ["100a"] => std::f64::NAN, - ["0x10"] => 16.0, - ["0xhello"] => std::f64::NAN, - ["123e-1"] => 12.3, - ["0x1999999981ffffff"] => -2113929217.0, - ["0xUIXUIDFKHJDF012345678"] => std::f64::NAN, - [] => 0.0 + test_std!(number_function, number, + [19] => { + [true] => 1.0, + [false] => 0.0, + [10.0] => 10.0, + [-10.0] => -10.0, + [0.0] => 0.0, + [std::f64::INFINITY] => std::f64::INFINITY, + [std::f64::NAN] => std::f64::NAN, + [""] => 0.0, + ["Hello"] => std::f64::NAN, + [" "] => std::f64::NAN, + [" 5 "] => std::f64::NAN, + ["0"] => 0.0, + ["1"] => 1.0, + ["Infinity"] => std::f64::NAN, + ["100a"] => std::f64::NAN, + ["0x10"] => 16.0, + ["0xhello"] => std::f64::NAN, + ["123e-1"] => 12.3, + ["0x1999999981ffffff"] => -2113929217.0, + ["0xUIXUIDFKHJDF012345678"] => std::f64::NAN, + [] => 0.0 + } ); }