package TestCase::Convert {
use TestCase::Minimal;
use TestCase::Callback::Callback;
use SPVM::Comparator;
use SPVM::Util (INT8_MIN, INT8_MAX, INT16_MIN, INT16_MAX, INT32_MIN, INT32_MAX, INT64_MIN, INT64_MAX, FLT_MIN, FLT_MAX, DBL_MIN, DBL_MAX);
sub convert_to_numeric_array : int () {
my $onums_byte : object = new byte[3];
my $nums_byte = (byte[])$onums_byte;
my $onums_short : object = new short[3];
my $nums_short = (short[])$onums_short;
my $onums_int : object = new int[3];
my $nums_int = (int[])$onums_int;
my $onums_long : object = new long[3];
my $nums_long = (long[])$onums_long;
my $onums_float : object = new float[3];
my $nums_float = (float[])$onums_float;
my $onums_double : object = new double[3];
my $nums_double = (double[])$onums_double;
return 1;
}
sub convert_to_any_object : int () {
my $object = (object)new TestCase::Minimal[3];
return 1;
}
sub convert_to_undef_to_any_object : int () {
my $minimal : TestCase::Minimal;
my $object = (object)$minimal;
if ($object == undef) {
return 1;
}
return 0;
}
sub convert_to_undef_to_object : int () {
my $minimal : TestCase::Minimal;
my $object = (TestCase::Minimal)$minimal;
if ($object == undef) {
return 1;
}
return 0;
}
sub convert_to_callback : int () {
my $comparator = sub : int ($self : self, $object1 : object, $object2 : object) {
return 5;
};
my $object : object = $comparator;
my $comparator2 = (SPVM::Comparator)$object;
if ($comparator2->(undef, undef) == 5) {
return 1;
}
return 0;
}
sub convert_to_undef_to_callback : int () {
my $comparator : SPVM::Comparator;
my $comparator2 = (SPVM::Comparator)$comparator;
if ($comparator2 == undef) {
return 1;
}
return 0;
}
sub convert_to_object_array : int () {
my $ominimals : object = new TestCase::Minimal[3];
my $minimals = (TestCase::Minimal[])$ominimals;
return 1;
}
sub convert_to_callback_array : int () {
my $ocallbacks : object = new TestCase::Callback::Callback[3];
my $callbacks = (TestCase::Callback::Callback[])$ocallbacks;
return 1;
}
# Convert type - floating point narrowing convertion
sub convert_float_to_byte : int () {
my $value = (byte)127.1f;
if ($value == 127) {
return 1;
}
return 0;
}
sub convert_float_to_short : int () {
my $value = (short)32767.1f;
if ($value == 32767) {
return 1;
}
return 0;
}
sub convert_float_to_int : int () {
my $value = (int)132767.1f;
if ($value == 132767) {
return 1;
}
return 0;
}
sub convert_float_to_long : int () {
my $value = (long)132767.1f;
if ($value == 132767L) {
return 1;
}
return 0;
}
sub convert_double_to_byte : int () {
my $value = (byte)127.1;
if ($value == 127) {
return 1;
}
return 0;
}
sub convert_double_to_short : int () {
my $value = (short)32767.1;
if ((int)$value == (int)(short)32767) {
return 1;
}
return 0;
}
sub convert_double_to_int : int () {
my $value = (int)2147483646.1;
if ($value == 2147483646) {
return 1;
}
return 0;
}
sub convert_double_to_long : int () {
my $value = (long)2147483646.1;
if ($value == 2147483646L) {
return 1;
}
return 0;
}
sub convert_double_to_float : int () {
my $value = (float)0.5;
if ($value == 0.5f) {
return 1;
}
return 0;
}
# Convert type - floating point widning convertion
sub convert_byte_to_float : int () {
my $value = (float)(byte)127;
if ($value == 127.0f) {
return 1;
}
return 0;
}
sub convert_short_to_float : int () {
my $value = (float)(short)32767;
if ($value == 32767.0f) {
return 1;
}
return 0;
}
sub convert_int_to_float : int () {
my $value = (float)32767;
if ($value == 32767.0f) {
return 1;
}
return 0;
}
sub convert_long_to_float : int () {
my $value = (float)32767L;
if ($value == 32767.0f) {
return 1;
}
return 0;
}
sub convert_byte_to_double : int () {
my $value = (double)(byte)127;
if ($value == 127.0) {
return 1;
}
return 0;
}
sub convert_short_to_double : int () {
my $value = (double)(short)32767;
if ($value == 32767.0) {
return 1;
}
return 0;
}
sub convert_int_to_double : int () {
my $value = (double)2147483647;
if ($value == 2147483647.0) {
return 1;
}
return 0;
}
sub convert_long_to_double : int () {
my $value = (double)2147483647L;
if ($value == 2147483647.0) {
return 1;
}
return 0;
}
sub convert_float_to_double : int () {
my $value = (double)32767.0f;
if ($value == 32767.0) {
return 1;
}
return 0;
}
# Convert type - widning convertion
sub convert_byte_to_short_plus : int () {
my $value = (short)(byte)0x7F;
if ((int)$value == (int)(short)0x007F) {
return 1;
}
return 0;
}
sub convert_byte_to_short_minus : int () {
my $value = (short)(byte)0xFF;
if ((int)$value == (int)(short)0xFFFF) {
return 1;
}
return 0;
}
sub convert_byte_to_int_plus : int () {
my $value = (int)(byte)0x7F;
if ($value == 0x0000007F) {
return 1;
}
return 0;
}
sub convert_byte_to_int_minus : int () {
my $value = (int)(byte)0xFF;
if ($value == 0xFFFFFFFF) {
return 1;
}
return 0;
}
sub convert_byte_to_long_plus : int () {
my $value = (long)(byte)0x7F;
if ($value == 0x000000000000007FL) {
return 1;
}
return 0;
}
sub convert_byte_to_long_minus : int () {
my $value = (long)(byte)0xFF;
if ($value == 0xFFFFFFFFFFFFFFFFL) {
return 1;
}
return 0;
}
sub convert_short_to_int_plus : int () {
my $value = (int)(short)0x7FFF;
if ($value == 0x0000007FFF) {
return 1;
}
return 0;
}
sub convert_short_to_int_minus : int () {
my $value = (int)(short)0xFFFF;
if ($value == 0xFFFFFFFF) {
return 1;
}
return 0;
}
sub convert_short_to_long_plus : int () {
my $value = (long)(short)0x7FFF;
if ($value == 0x000000000000007FFFL) {
return 1;
}
return 0;
}
sub convert_short_to_long_minus : int () {
my $value = (long)(short)0xFFFF;
if ($value == 0xFFFFFFFFFFFFFFFFL) {
return 1;
}
return 0;
}
sub convert_int_to_long_plus : int () {
my $value = (long)0x7FFFFFFF;
if ($value == 0x000000007FFFFFFFL) {
return 1;
}
return 0;
}
sub convert_int_to_long_minus : int () {
my $value = (long)0xFFFFFFFF;
if ($value == 0xFFFFFFFFFFFFFFFFL) {
return 1;
}
return 0;
}
# Convert type - convert to same type
sub convert_long_to_long : int () {
my $value = (long)0xFFFFFFFFFFFFFFFFL;
if ($value == 0xFFFFFFFFFFFFFFFFL) {
return 1;
}
return 0;
}
sub convert_int_to_int : int () {
my $value = (int)0xFFFFFFFF;
if ($value == 0xFFFFFFFF) {
return 1;
}
return 0;
}
sub convert_short_to_short : int () {
my $value = (short)(short)0xFFFF;
if ((int)$value == (int)(short)0xFFFF) {
return 1;
}
return 0;
}
sub convert_byte_to_byte : int () {
my $value = (byte)(byte)0xFF;
if ($value == (byte)0xFF) {
return 1;
}
return 0;
}
sub convert_float_to_float : int () {
my $value = (float)0.5f;
if ($value == 0.5f) {
return 1;
}
return 0;
}
sub convert_double_to_double : int () {
my $value = (double)0.5;
if ($value == 0.5) {
return 1;
}
return 0;
}
# Convert type - integral narrowing convertion
sub convert_long_to_int : int () {
my $value = (int)0xFFFFFFFFFFFFFFFFL;
if ($value == 0xFFFFFFFF) {
return 1;
}
return 0;
}
sub convert_long_to_short : int () {
my $value = (short)0xFFFFFFFFFFFFFFFFL;
if ((int)$value == (int)(short)0xFFFF) {
return 1;
}
return 0;
}
sub convert_long_to_byte : int () {
my $value = (byte)0xFFFFFFFFFFFFFFFFL;
if ((int)$value == (int)(byte)0xFF) {
return 1;
}
return 0;
}
sub convert_int_to_short : int () {
my $value = (short)0xFFFFFFFF;
if ((int)$value == (int)(short)0xFFFF) {
return 1;
}
return 0;
}
sub convert_int_to_byte : int () {
my $value = (byte)0xFFFFFFFF;
if ((int)$value == (int)(byte)0xFF) {
return 1;
}
return 0;
}
sub convert_short_to_byte : int () {
my $value = (byte)(short)0xFFFF;
if ((int)$value == (int)(byte)0xFF) {
return 1;
}
return 0;
}
sub convert_to_string : int () {
my $byte_string = (string)(byte)23;
my $short_string = (string)(short)23;
my $int_string = (string)23;
my $long_string = (string)23L;
my $float_string = (string)0.25000f;
my $double_string = (string)0.25000;
if ($byte_string eq "23") {
if ($short_string eq "23") {
if ($int_string eq "23") {
if ($long_string eq "23") {
if ($float_string eq "0.25") {
if ($double_string eq "0.25") {
return 1;
}
}
}
}
}
}
return 0;
}
sub convert_byte_to_byte_object : int () {
my $byte : byte = INT8_MIN();
my $byte_obj = (SPVM::Byte)$byte;
if ($byte_obj isa SPVM::Byte) {
if ($byte_obj->val == INT8_MIN()) {
return 1;
}
}
return 0;
}
sub convert_short_to_short_object : int () {
my $short : short = INT16_MIN();
my $short_obj = (SPVM::Short)$short;
if ($short_obj isa SPVM::Short) {
if ($short_obj->val == INT16_MIN()) {
return 1;
}
}
return 0;
}
sub convert_int_to_int_object : int () {
my $int : int = INT32_MIN();
my $int_obj = (SPVM::Int)$int;
if ($int_obj isa SPVM::Int) {
if ($int_obj->val == INT32_MIN()) {
return 1;
}
}
return 0;
}
sub convert_long_to_long_object : int () {
my $long : long = INT64_MIN();
my $long_obj = (SPVM::Long)$long;
if ($long_obj isa SPVM::Long) {
if ($long_obj->val == INT64_MIN()) {
return 1;
}
}
return 0;
}
sub convert_float_to_float_object : int () {
my $float : float = FLT_MIN();
my $float_obj = (SPVM::Float)$float;
if ($float_obj isa SPVM::Float) {
if ($float_obj->val == FLT_MIN()) {
return 1;
}
}
return 0;
}
sub convert_double_to_double_object : int () {
my $double : double = DBL_MIN();
my $double_obj = (SPVM::Double)$double;
if ($double_obj isa SPVM::Double) {
if ($double_obj->val == DBL_MIN()) {
return 1;
}
}
return 0;
}
sub convert_byte_to_any_object : int () {
my $byte : byte = INT8_MIN();
my $byte_obj = (object)$byte;
if ($byte_obj isa SPVM::Byte) {
my $byte_obj2 = (SPVM::Byte)$byte_obj;
if ($byte_obj2->val == INT8_MIN()) {
return 1;
}
}
return 0;
}
sub convert_short_to_any_object : int () {
my $short : short = INT16_MIN();
my $short_obj = (object)$short;
if ($short_obj isa SPVM::Short) {
my $short_obj2 = (SPVM::Short)$short_obj;
if ($short_obj2->val == INT16_MIN()) {
return 1;
}
}
return 0;
}
sub convert_int_to_any_object : int () {
my $int : int = INT32_MIN();
my $int_obj = (object)$int;
if ($int_obj isa SPVM::Int) {
my $int_obj2 = (SPVM::Int)$int_obj;
if ($int_obj2->val == INT32_MIN()) {
return 1;
}
}
return 0;
}
sub convert_long_to_any_object : int () {
my $long : long = INT64_MIN();
my $long_obj = (object)$long;
if ($long_obj isa SPVM::Long) {
my $long_obj2 = (SPVM::Long)$long_obj;
if ($long_obj2->val == INT64_MIN()) {
return 1;
}
}
return 0;
}
sub convert_float_to_any_object : int () {
my $float : float = FLT_MIN();
my $float_obj = (object)$float;
if ($float_obj isa SPVM::Float) {
my $float_obj2 = (SPVM::Float)$float_obj;
if ($float_obj2->val == FLT_MIN()) {
return 1;
}
}
return 0;
}
sub convert_double_to_any_object : int () {
my $double : double = DBL_MIN();
my $double_obj = (object)$double;
if ($double_obj isa SPVM::Double) {
my $double_obj2 = (SPVM::Double)$double_obj;
if ($double_obj2->val == DBL_MIN()) {
return 1;
}
}
return 0;
}
sub convert_byte_object_to_byte : int () {
my $byte_obj = SPVM::Byte->new(INT8_MIN());
my $byte = (byte)$byte_obj;
if ($byte == INT8_MIN()) {
return 1;
}
return 0;
}
sub convert_short_object_to_short : int () {
my $short_obj = SPVM::Short->new(INT16_MIN());
my $short = (short)$short_obj;
if ($short == INT16_MIN()) {
return 1;
}
return 0;
}
sub convert_int_object_to_int : int () {
my $int_obj = SPVM::Int->new(INT32_MIN());
my $int = (int)$int_obj;
if ($int == INT32_MIN()) {
return 1;
}
return 0;
}
sub convert_long_object_to_long : int () {
my $long_obj = SPVM::Long->new(INT64_MIN());
my $long = (long)$long_obj;
if ($long == INT64_MIN()) {
return 1;
}
return 0;
}
sub convert_float_object_to_float : int () {
my $float_obj = SPVM::Float->new(FLT_MIN());
my $float = (float)$float_obj;
if ($float == FLT_MIN()) {
return 1;
}
return 0;
}
sub convert_double_object_to_double : int () {
my $double_obj = SPVM::Double->new(DBL_MIN());
my $double = (double)$double_obj;
if ($double == DBL_MIN()) {
return 1;
}
return 0;
}
sub convert_any_object_to_byte : int () {
my $byte_obj = (object)SPVM::Byte->new(INT8_MIN());
my $byte = (byte)$byte_obj;
if ($byte == INT8_MIN()) {
return 1;
}
return 0;
}
sub convert_any_object_to_short : int () {
my $short_obj = (object)SPVM::Short->new(INT16_MIN());
my $short = (short)$short_obj;
if ($short == INT16_MIN()) {
return 1;
}
return 0;
}
sub convert_any_object_to_int : int () {
my $int_obj = (object)SPVM::Int->new(INT32_MIN());
my $int = (int)$int_obj;
if ($int == INT32_MIN()) {
return 1;
}
return 0;
}
sub convert_any_object_to_long : int () {
my $long_obj = (object)SPVM::Long->new(INT64_MIN());
my $long = (long)$long_obj;
if ($long == INT64_MIN()) {
return 1;
}
return 0;
}
sub convert_any_object_to_float : int () {
my $float_obj = (object)SPVM::Float->new(FLT_MIN());
my $float = (float)$float_obj;
if ($float == FLT_MIN()) {
return 1;
}
return 0;
}
sub convert_any_object_to_double : int () {
my $double_obj = (object)SPVM::Double->new(DBL_MIN());
my $double = (double)$double_obj;
if ($double == DBL_MIN()) {
return 1;
}
return 0;
}
}