Add tests for hex parsing

This commit is contained in:
Darin Morrison
2020-03-01 20:35:25 -07:00
committed by Andrew Brown
parent 2300eec8a5
commit c459579396

View File

@@ -3363,6 +3363,78 @@ mod tests {
assert!(parse_as_uimm8("0xffa").is_err());
}
#[test]
fn i16_as_hex() {
fn parse_as_imm16(text: &str) -> ParseResult<i16> {
Parser::new(text).match_imm16("unable to parse i16")
}
assert_eq!(parse_as_imm16("0x8000").unwrap(), -32768);
assert_eq!(parse_as_imm16("0xffff").unwrap(), -1);
assert_eq!(parse_as_imm16("0").unwrap(), 0);
assert_eq!(parse_as_imm16("0x7fff").unwrap(), 32767);
assert_eq!(
parse_as_imm16("-0x0001").unwrap(),
parse_as_imm16("0xffff").unwrap()
);
assert_eq!(
parse_as_imm16("-0x7fff").unwrap(),
parse_as_imm16("0x8001").unwrap()
);
assert!(parse_as_imm16("0xffffa").is_err());
}
#[test]
fn i32_as_hex() {
fn parse_as_imm32(text: &str) -> ParseResult<i32> {
Parser::new(text).match_imm32("unable to parse i32")
}
assert_eq!(parse_as_imm32("0x80000000").unwrap(), -2147483648);
assert_eq!(parse_as_imm32("0xffffffff").unwrap(), -1);
assert_eq!(parse_as_imm32("0").unwrap(), 0);
assert_eq!(parse_as_imm32("0x7fffffff").unwrap(), 2147483647);
assert_eq!(
parse_as_imm32("-0x00000001").unwrap(),
parse_as_imm32("0xffffffff").unwrap()
);
assert_eq!(
parse_as_imm32("-0x7fffffff").unwrap(),
parse_as_imm32("0x80000001").unwrap()
);
assert!(parse_as_imm32("0xffffffffa").is_err());
}
#[test]
fn i64_as_hex() {
fn parse_as_imm64(text: &str) -> ParseResult<Imm64> {
Parser::new(text).match_imm64("unable to parse Imm64")
}
assert_eq!(
parse_as_imm64("0x8000000000000000").unwrap(),
Imm64::new(-9223372036854775808)
);
assert_eq!(
parse_as_imm64("0xffffffffffffffff").unwrap(),
Imm64::new(-1)
);
assert_eq!(parse_as_imm64("0").unwrap(), Imm64::new(0));
assert_eq!(
parse_as_imm64("0x7fffffffffffffff").unwrap(),
Imm64::new(9223372036854775807)
);
assert_eq!(
parse_as_imm64("-0x0000000000000001").unwrap(),
parse_as_imm64("0xffffffffffffffff").unwrap()
);
assert_eq!(
parse_as_imm64("-0x7fffffffffffffff").unwrap(),
parse_as_imm64("0x8000000000000001").unwrap()
);
assert!(parse_as_imm64("0xffffffffffffffffa").is_err());
}
#[test]
fn uimm128() {
macro_rules! parse_as_constant_data {