use crate::*;
#[test]
fn test_kaddw_basic() {
let mut emu = emu64();
let code = [
0xC5, 0xF8, 0x90, 0xC1, 0xC5, 0xF8, 0x90, 0xCA, 0xC4, 0xE1, 0xF4, 0x4A, 0xD0, 0xF4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_kaddw_zero_masks() {
let mut emu = emu64();
let code = [
0xC5, 0xF8, 0x91, 0xC0, 0xC5, 0xF8, 0x91, 0xC1, 0xC4, 0xE1, 0xFC, 0x4A, 0xD0, 0xF4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_kaddw_all_ones() {
let mut emu = emu64();
let code = [
0xB8, 0xFF, 0xFF, 0x00, 0x00, 0xC5, 0xF8, 0x92, 0xC0, 0xC5, 0xF8, 0x92, 0xC8, 0xC4, 0xE1, 0xF4, 0x4A, 0xD0, 0xC5, 0xF8, 0x93, 0xC2, 0xF4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_kaddw_pattern_5555_aaaa() {
let mut emu = emu64();
let code = [
0xB8, 0x55, 0x55, 0x00, 0x00, 0xC5, 0xF8, 0x92, 0xC0, 0xB8, 0xAA, 0xAA, 0x00, 0x00, 0xC5, 0xF8, 0x92, 0xC8, 0xC4, 0xE1, 0xF4, 0x4A, 0xD0, 0xC5, 0xF8, 0x93, 0xC2, 0xF4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_kaddw_overflow() {
let mut emu = emu64();
let code = [
0xB8, 0xFF, 0x7F, 0x00, 0x00, 0xC5, 0xF8, 0x92, 0xC0, 0xB8, 0x02, 0x00, 0x00, 0x00, 0xC5, 0xF8, 0x92, 0xC8, 0xC4, 0xE1, 0xF4, 0x4A, 0xD0, 0xF4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_kaddw_chain_operations() {
let mut emu = emu64();
let code = [
0xB8, 0x11, 0x11, 0x00, 0x00, 0xC5, 0xF8, 0x92, 0xC0, 0xC5, 0xF8, 0x92, 0xC8, 0xC4, 0xE1, 0xF4, 0x4A, 0xD0, 0xC4, 0xE1, 0xEC, 0x4A, 0xD8, 0xF4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_kaddb_basic() {
let mut emu = emu64();
let code = [
0xB8, 0x0F, 0x00, 0x00, 0x00, 0xC5, 0xF9, 0x92, 0xC0, 0xB8, 0xF0, 0x00, 0x00, 0x00, 0xC5, 0xF9, 0x92, 0xC8, 0xC5, 0xF5, 0x4A, 0xD0, 0xF4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_kaddb_zero_result() {
let mut emu = emu64();
let code = [
0x31, 0xC0, 0xC5, 0xF9, 0x92, 0xC0, 0xC5, 0xF9, 0x92, 0xC8, 0xC5, 0xF5, 0x4A, 0xD0, 0xF4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_kaddb_max_value() {
let mut emu = emu64();
let code = [
0xB8, 0xFF, 0x00, 0x00, 0x00, 0xC5, 0xF9, 0x92, 0xC0, 0xC5, 0xF9, 0x92, 0xC8, 0xC5, 0xF5, 0x4A, 0xD0, 0xC5, 0xF9, 0x93, 0xC2, 0xF4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_kaddb_bit_patterns() {
let mut emu = emu64();
let code = [
0xB8, 0xAA, 0x00, 0x00, 0x00, 0xC5, 0xF9, 0x92, 0xC0, 0xB8, 0x55, 0x00, 0x00, 0x00, 0xC5, 0xF9, 0x92, 0xC8, 0xC5, 0xF5, 0x4A, 0xD0, 0xF4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_kaddb_carry_behavior() {
let mut emu = emu64();
let code = [
0xB8, 0x80, 0x00, 0x00, 0x00, 0xC5, 0xF9, 0x92, 0xC0, 0xB8, 0x81, 0x00, 0x00, 0x00, 0xC5, 0xF9, 0x92, 0xC8, 0xC5, 0xF5, 0x4A, 0xD0, 0xF4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_kaddq_basic() {
let mut emu = emu64();
let code = [
0x48, 0xB8, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xC4, 0xE1, 0xF8, 0x92, 0xC0, 0x48, 0xB8, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xC4, 0xE1, 0xF8, 0x92, 0xC8, 0xC4, 0xE1, 0xF4, 0x4A, 0xD0, 0xF4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_kaddq_zero() {
let mut emu = emu64();
let code = [
0x48, 0x31, 0xC0, 0xC4, 0xE1, 0xF8, 0x92, 0xC0, 0xC4, 0xE1, 0xF8, 0x92, 0xC8, 0xC4, 0xE1, 0xF4, 0x4A, 0xD0, 0xF4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_kaddq_all_ones() {
let mut emu = emu64();
let code = [
0x48, 0xC7, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xC4, 0xE1, 0xF8, 0x92, 0xC0, 0xC4, 0xE1, 0xF8, 0x92, 0xC8, 0xC4, 0xE1, 0xF4, 0x4A, 0xD0, 0xC4, 0xE1, 0xF8, 0x93, 0xC2, 0xF4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_kaddq_large_values() {
let mut emu = emu64();
let code = [
0x48, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC4, 0xE1, 0xF8, 0x92, 0xC0, 0x48, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4, 0xE1, 0xF8, 0x92, 0xC8, 0xC4, 0xE1, 0xF4, 0x4A, 0xD0, 0xF4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_kaddq_pattern() {
let mut emu = emu64();
let code = [
0x48, 0xB8, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xC4, 0xE1, 0xF8, 0x92, 0xC0, 0x48, 0xB8, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xC4, 0xE1, 0xF8, 0x92, 0xC8, 0xC4, 0xE1, 0xF4, 0x4A, 0xD0, 0xF4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_kaddd_basic() {
let mut emu = emu64();
let code = [
0xB8, 0xFF, 0xFF, 0x00, 0x00, 0xC5, 0xFB, 0x92, 0xC0, 0xB8, 0x00, 0x00, 0xFF, 0xFF, 0xC5, 0xFB, 0x92, 0xC8, 0xC5, 0xF5, 0x4A, 0xD0, 0xF4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_kaddd_zero() {
let mut emu = emu64();
let code = [
0x31, 0xC0, 0xC5, 0xFB, 0x92, 0xC0, 0xC5, 0xFB, 0x92, 0xC8, 0xC5, 0xF5, 0x4A, 0xD0, 0xF4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_kaddd_max_value() {
let mut emu = emu64();
let code = [
0xB8, 0xFF, 0xFF, 0xFF, 0xFF, 0xC5, 0xFB, 0x92, 0xC0, 0xC5, 0xFB, 0x92, 0xC8, 0xC5, 0xF5, 0x4A, 0xD0, 0xC5, 0xFB, 0x93, 0xC2, 0xF4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_kaddd_alternating_bits() {
let mut emu = emu64();
let code = [
0xB8, 0x55, 0x55, 0x55, 0x55, 0xC5, 0xFB, 0x92, 0xC0, 0xB8, 0xAA, 0xAA, 0xAA, 0xAA, 0xC5, 0xFB, 0x92, 0xC8, 0xC5, 0xF5, 0x4A, 0xD0, 0xF4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_kaddd_overflow() {
let mut emu = emu64();
let code = [
0xB8, 0xFF, 0xFF, 0xFF, 0x7F, 0xC5, 0xFB, 0x92, 0xC0, 0xB8, 0x02, 0x00, 0x00, 0x00, 0xC5, 0xFB, 0x92, 0xC8, 0xC5, 0xF5, 0x4A, 0xD0, 0xF4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_kaddd_multiple_operations() {
let mut emu = emu64();
let code = [
0xB8, 0x11, 0x11, 0x11, 0x11, 0xC5, 0xFB, 0x92, 0xC0, 0xB8, 0x22, 0x22, 0x22, 0x22, 0xC5, 0xFB, 0x92, 0xC8, 0xC5, 0xF5, 0x4A, 0xD0, 0xB8, 0x33, 0x33, 0x33, 0x33, 0xC5, 0xFB, 0x92, 0xD8, 0xC5, 0xED, 0x4A, 0xE2, 0xF4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_kadd_mixed_operations() {
let mut emu = emu64();
let code = [
0xB8, 0xFF, 0x00, 0x00, 0x00, 0xC5, 0xF9, 0x92, 0xC0, 0xC5, 0xF9, 0x92, 0xC8, 0xC5, 0xF5, 0x4A, 0xD0, 0xB8, 0xFF, 0xFF, 0x00, 0x00, 0xC5, 0xF8, 0x92, 0xD8, 0xC5, 0xF8, 0x92, 0xE0, 0xC4, 0xE1, 0xDC, 0x4A, 0xEB, 0xF4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_kadd_sequential_chain() {
let mut emu = emu64();
let code = [
0xB8, 0x01, 0x00, 0x00, 0x00, 0xC5, 0xFB, 0x92, 0xC0, 0xC5, 0xFB, 0x92, 0xC8, 0xC5, 0xF5, 0x4A, 0xD0, 0xC5, 0xED, 0x4A, 0xD8, 0xC5, 0xE5, 0x4A, 0xE0, 0xC5, 0xDD, 0x4A, 0xE8, 0xF4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}
#[test]
fn test_kadd_all_sizes_comprehensive() {
let mut emu = emu64();
let code = [
0xB8, 0x0F, 0x00, 0x00, 0x00, 0xC5, 0xF9, 0x92, 0xC0, 0xB8, 0xF0, 0x00, 0x00, 0x00, 0xC5, 0xF9, 0x92, 0xC8, 0xC5, 0xF5, 0x4A, 0xD0,
0xB8, 0xFF, 0x0F, 0x00, 0x00, 0xC5, 0xF8, 0x92, 0xD8, 0xB8, 0x00, 0xF0, 0x00, 0x00, 0xC5, 0xF8, 0x92, 0xE0, 0xC4, 0xE1, 0xDC, 0x4A, 0xEB,
0xB8, 0xFF, 0xFF, 0x00, 0x00, 0xC5, 0xFB, 0x92, 0xF0, 0xB8, 0x00, 0x00, 0xFF, 0xFF, 0xC5, 0xFB, 0x92, 0xF8, 0xC4, 0xC1, 0x4D, 0x4A, 0xC7,
0xF4, ];
emu.load_code_bytes(&code);
emu.run(None).unwrap();
}