class TestCase::NumericOperator {
# Negate
static method negate : int () {
my $num_byte = (byte)1;
my $num_short = (short)1;
my $num_int = 1;
my $num_long = 1L;
my $num_float = 1f;
my $num_double = 1d;
my $num_byte_negate : int = -$num_byte;
my $num_short_negate : int = -$num_short;
my $num_int_negate = -$num_int;
my $num_long_negate = -$num_long;
my $num_float_negate = -$num_float;
my $num_double_negate = -$num_double;
if ($num_byte_negate == -1) {
if ($num_short_negate == -1) {
if ($num_int_negate == -1) {
if ($num_long_negate == -1L) {
if ($num_float_negate == -1f) {
if ($num_double_negate == -1d) {
return 1;
}
}
}
}
}
}
return 0;
}
# Negate
static method plus : int () {
my $num_byte = (byte)1;
my $num_short = (short)1;
my $num_int = 1;
my $num_long = 1L;
my $num_float = 1f;
my $num_double = 1d;
my $num_byte_plus : int = +$num_byte;
my $num_short_plus : int = +$num_short;
my $num_int_plus = +$num_int;
my $num_long_plus = +$num_long;
my $num_float_plus = +$num_float;
my $num_double_plus = +$num_double;
if ($num_byte_plus == 1) {
if ($num_short_plus == 1) {
if ($num_int_plus == 1) {
if ($num_long_plus == 1L) {
if ($num_float_plus == 1f) {
if ($num_double_plus == 1d) {
return 1;
}
}
}
}
}
}
return 0;
}
static method add : int () {
# float
my $float_success = 0;
{
my $value1 : float = 0.25f + 0.5f;
my $value2 : float = (byte)2 + 0.5f;
my $value3 : float = 0.5f + (byte)2;
my $value4 : float = (short)2 + 0.5f;
my $value5 : float = 0.5f + (short)2;
my $value6 : float = 2 + 0.5f;
my $value7 : float = 0.5f + 2;
if ($value1 == 0.75f) {
if ($value2 == 2.5f) {
if ($value3 == 2.5f) {
if ($value4 == 2.5f) {
if ($value5 == 2.5f) {
if ($value6 == 2.5f) {
if ($value7 == 2.5f) {
$float_success = 1;
}
}
}
}
}
}
}
}
# double
my $double_success = 0;
{
my $value1 : double = (byte)2 + 0.5;
my $value2 : double = 0.5 + (byte)2;
my $value3 : double = (short)2 + 0.5;
my $value4 : double = 0.5 + (short)2;
my $value5 : double = 2 + 0.5;
my $value6 : double = 0.5 + 2;
my $value7 : double = 0.5 + 0.25;
my $value8 : double = 0.5 + 0.25f;
my $value9 : double = 0.25f + 0.5;
if ($value1 == 2.5) {
if ($value2 == 2.5) {
if ($value3 == 2.5) {
if ($value4 == 2.5) {
if ($value5 == 2.5) {
if ($value6 == 2.5) {
if ($value7 == 0.75) {
if ($value8 == 0.75) {
if ($value9 == 0.75) {
$double_success = 1;
}
}
}
}
}
}
}
}
}
}
if ($float_success && $double_success) {
return 1;
}
return 0;
}
# Multiply
static method multiply : int () {
# int
my $int_success = 0;
{
my $value1 : int = -2 * 2;
my $value2 : int = (byte)-2 * 3;
my $value3 : int = -2 * (byte)4;
my $value4 : int = (short)-2 * 5;
my $value5 : int = -2 * (short)6;
my $value6 : int = (byte)-2 * (byte)7;
my $value7 : int = (short)-2 * (short)8;
my $value8 : int = (byte)-2 * (short)9;
if ($value1 == -4) {
if ($value2 == -6) {
if ($value3 == -8) {
if ($value4 == -10) {
if ($value5 == -12) {
if ($value6 == -14) {
if ($value7 == -16) {
if ($value8 == -18) {
$int_success = 1;
}
}
}
}
}
}
}
}
}
# float
my $float_success = 0;
{
my $value1 : float = 0.25f * 0.5f;
my $value2 : float = (byte)2 * 0.5f;
my $value3 : float = 0.5f * (byte)2;
my $value4 : float = (short)2 * 0.5f;
my $value5 : float = 0.5f * (short)2;
my $value6 : float = 2 * 0.5f;
my $value7 : float = 0.5f * 2;
if ($value1 == 0.125f) {
if ($value2 == 1.0f) {
if ($value3 == 1.0f) {
if ($value4 == 1.0f) {
if ($value5 == 1.0f) {
if ($value6 == 1.0f) {
if ($value7 == 1.0f) {
$float_success = 1;
}
}
}
}
}
}
}
}
# double
my $double_success = 0;
{
my $value1 : double = (byte)2 * 0.5;
my $value2 : double = 0.5 * (byte)2;
my $value3 : double = (short)2 * 0.5;
my $value4 : double = 0.5 * (short)2;
my $value5 : double = 2 * 0.5;
my $value6 : double = 0.5 * 2;
my $value7 : double = 0.5 * 0.25;
my $value8 : double = 0.5 * 0.25f;
my $value9 : double = 0.25f * 0.5;
if ($value1 == 1.0) {
if ($value2 == 1.0) {
if ($value3 == 1.0) {
if ($value4 == 1.0) {
if ($value5 == 1.0) {
if ($value6 == 1.0) {
if ($value7 == 0.125) {
if ($value8 == 0.125) {
if ($value9 == 0.125) {
$double_success = 1;
}
}
}
}
}
}
}
}
}
}
if ($int_success && $float_success && $double_success) {
return 1;
}
return 0;
}
# Multiply
static method multiply_int_plus : int () {
return (int)536870912 * (int)2;
}
static method multiply_int_minus : int () {
return (int)536870912 * (int)-2;
}
static method multiply_int_overflow : int () {
return (int)1073741824 * (int)2;
}
static method multiply_long_plus : long () {
return (long)2305843009213693952L * (long)2L;
}
static method multiply_long_minus : long () {
return (long)2305843009213693952L * (long)-2L;
}
static method multiply_long_overflow : long () {
return (long)4611686018427387904L * (long)2L;
}
# Multiply
static method divide : int () {
# int
my $int_success = 0;
{
my $value1 : int = 8 / 4;
my $value2 : int = (byte)8 / 4;
my $value3 : int = 8 / (byte)4;
my $value4 : int = (short)8 / 4;
my $value5 : int = 8 / (short)4;
my $value6 : int = (byte)8 / (byte)4;
my $value7 : int = (short)8 / (short)4;
my $value8 : int = (byte)8 / (short)4;
my $value9 : int = 8 / 3;
if ($value1 == 2) {
if ($value2 == 2) {
if ($value3 == 2) {
if ($value4 == 2) {
if ($value5 == 2) {
if ($value6 == 2) {
if ($value7 == 2) {
if ($value8 == 2) {
if ($value9 == 2) {
$int_success = 1;
}
}
}
}
}
}
}
}
}
}
# float
my $float_success = 0;
{
my $value1 : float = 1.0f / 2.0f;
my $value2 : float = (byte)1 / 2.0f;
my $value3 : float = 1.0f / (byte)2;
my $value4 : float = (short)1 / 2.0f;
my $value5 : float = 1.0f / (short)2;
my $value6 : float = 1 / 2.0f;
my $value7 : float = 1.0f / 2;
if ($value1 == 0.5f) {
if ($value2 == 0.5f) {
if ($value3 == 0.5f) {
if ($value4 == 0.5f) {
if ($value5 == 0.5f) {
if ($value6 == 0.5f) {
if ($value7 == 0.5f) {
$float_success = 1;
}
}
}
}
}
}
}
}
# double
my $double_success = 0;
{
my $value1 : double = 1.0 / 2.0;
my $value2 : double = (byte)1 / 2.0;
my $value3 : double = 1.0 / (byte)2;
my $value4 : double = (short)1 / 2.0;
my $value5 : double = 1.0 / (short)2;
my $value6 : double = 1 / 2.0;
my $value7 : double = 1.0 / 2;
my $value8 : double = 1.0 / 2.0f;
my $value9 : double = 1.0f / 2.0;
if ($value1 == 0.5f) {
if ($value2 == 0.5f) {
if ($value3 == 0.5f) {
if ($value4 == 0.5f) {
if ($value5 == 0.5f) {
if ($value6 == 0.5f) {
if ($value7 == 0.5f) {
if ($value8 == 0.5f) {
if ($value9 == 0.5f) {
$double_success = 1;
}
}
}
}
}
}
}
}
}
}
if ($int_success && $float_success && $double_success) {
return 1;
}
return 0;
}
static method remainder : int () {
my $num1 = (byte)((byte)5 % (byte)3);
my $num2 = (byte)((byte)-3 % (byte)5);
my $num3 = (short)((int)(short)5 % (int)(short)3);
my $num4 = (short)((int)(short)-3 % (int)(short)5);
my $num5 = 5 % 3;
my $num6 = -3 % 5;
my $num7 = 5L % 3L;
my $num8 = -3L % 5L;
if ($num1 == 2) {
if ($num2 == -3) {
if ($num3 == 2) {
if ($num4 == -3) {
if ($num5 == 2) {
if ($num6 == -3) {
if ($num7 == 2L) {
if ($num8 == -3L) {
return 1;
}
}
}
}
}
}
}
}
return 0;
}
}