use crate::maps::mem64::Permission;
use crate::tests::helpers;
use crate::*;
#[test]
pub fn maps_memory_operations() {
helpers::setup();
let mut emu = emu64();
let base = 0x10000;
let size = 0x1000;
let result = emu
.maps
.create_map("test_map", base, size, Permission::READ_WRITE);
assert!(result.is_ok());
assert!(emu.maps.is_allocated(base));
assert!(emu.maps.exists_mapname("test_map"));
assert!(emu.maps.write_dword(base, 0xDEADBEEF));
assert_eq!(emu.maps.read_dword(base).unwrap(), 0xDEADBEEF);
assert!(emu.maps.write_qword(base + 8, 0x123456789ABCDEF0));
assert_eq!(emu.maps.read_qword(base + 8).unwrap(), 0x123456789ABCDEF0);
assert!(emu.maps.write_byte(base + 16, 0xAB));
assert_eq!(emu.maps.read_byte(base + 16).unwrap(), 0xAB);
assert!(emu.maps.write_word(base + 18, 0x1234));
assert_eq!(emu.maps.read_word(base + 18).unwrap(), 0x1234);
emu.maps.set_banzai(true);
assert!(!emu.maps.write_dword(base + size, 0x12345678));
assert!(emu.maps.read_dword(base + size).is_none());
let test_str = "Hello World";
emu.maps.write_string(base + 32, test_str);
assert_eq!(emu.maps.read_string(base + 32), test_str);
let test_map = emu
.maps
.get_map_by_name("test_map")
.expect("Fail to get map");
assert_eq!(test_map.permission().can_execute(), false);
let result2 = emu
.maps
.create_map("test_map", base, size, Permission::READ_WRITE);
assert!(result2.is_err());
}