#########################

use Test::More tests => 11;

sub BEGIN {
use_ok('Games::Hack::Patch::x86_64');
}

#########################

# Insert your test code below, the Test::More module is use()ed here so read
# its man page ( perldoc Test::More ) for help writing this test script.

# not a real example, instruction would be longer.
# just testing if a NOP would be issued.
$bin=GetNOP(5,6, 'mov eax,$1');
is($bin, "\x90", "NOP");

$bin=GetNOP(5,10, 'mov eax,$1');
is($bin, "\xeb\x03", "Simply short jump");

$bin=GetNOP(5,11, 'fstps +20(%ebp)');
is($bin, "\xdf\xc0\xeb\x02", "Floating point store 1");

$bin=GetNOP(5,10, 'fstp +20(%ebp)');
is($bin, "\xdf\xc0\xeb\x01", "Floating point store 2");
$bin=GetNOP(5,10, 'fst +20(%ebp)');
is($bin, "\xeb\x03", "Floating point store without pop");

$bin=GetNOP(10,14, 'popl [esi]');
is($bin, "\x83\xc4\x04\x90", "Pop from stack");


$has_warned=0;
eval { 
	local %SIG;
	$SIG{'__WARN__'} = sub { $has_warned++ };

	$bin=GetNOP(5,10, 'xxx'); 
};
is($bin, undef, "Unknown instructions are not simply patched");
is($has_warned, 1, "Unknown instructions are warned about");


{ TODO: {
	local $TODO="SIMD/MMX ops not done yet";
	local %SIG;
	$SIG{'__WARN__'} = sub { };

# is that an sse instruction?
	$bin=GetNOP(5,10, 'psubsw');
	is($bin, "", "SIMD/MMX op");
} }

ok("finished");

