core: Allow global test_std to test multiple swf versions
This commit is contained in:
parent
4c7d37c498
commit
999bb128de
|
@ -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
|
||||
}
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue