core: Allow global test_std to test multiple swf versions

This commit is contained in:
Nathan Adams 2019-11-24 23:56:35 +01:00 committed by Mike Welsh
parent 4c7d37c498
commit 999bb128de
1 changed files with 95 additions and 86 deletions

View File

@ -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<Value> = 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<Value> = 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
}
);
}