The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

class TestCase::NativeAPI {
use TestCase;
use TestCase::Simple;
use TestCase::Minimal;
use TestCase::Pointer;
use TestCase::PointerChild;
use TestCase::PointerEmpty;
use TestCase::Operator::AnonMethod::AnonMethod;
use TestCase::Operator::AnonMethod::ImplementAnonMethod1;
use TestCase::Operator::AnonMethod::ImplementAnonMethod2;
use Fn;
use Array;
use Error;
use Complex_2d;
use Point;
use TestCase::PrecompileClassAttribute;
use TestCase::Operator::MethodCall;
use TestCase::Resource::Mylib1;
use TestCase::Resource::Mylib2;
INIT {
# Call native method in INIT block
Fn->sizeof_native_int;
}
enum {
VALUE0,
}
our $BYTE_VALUE : byte;
our $SHORT_VALUE : short;
our $INT_VALUE : int;
our $LONG_VALUE : long;
our $FLOAT_VALUE : float;
our $DOUBLE_VALUE : double;
our $MINIMAL_VALUE : TestCase::Minimal;
our $STDOUT_WINDOWS_BINARY_MODE : int;
our $STDERR_WINDOWS_BINARY_MODE : int;
our $STDIN_WINDOWS_BINARY_MODE : int;
has text : rw string;
has color : rw int;
has draw_left : rw int;
has draw_top : rw int;
has draw_width : rw int;
has draw_height : rw int;
static method new : TestCase::NativeAPI () {
return new TestCase::NativeAPI;
}
native static method new_memory_apis : int ();
native static method check_native_api_ids : int ();
native static method check_native_api_allocator_ids : int ();
native static method check_native_api_arg_ids : int ();
native static method check_native_api_basic_type_ids : int ();
native static method check_native_api_class_file_ids : int ();
native static method check_native_api_class_var_ids : int ();
native static method check_native_api_compiler_ids : int ();
native static method check_native_api_field_ids : int ();
native static method check_native_api_internal_ids : int ();
native static method check_native_api_method_ids : int ();
native static method check_native_api_mutex_ids : int ();
native static method check_native_api_runtime_ids : int ();
native static method check_native_api_string_buffer_ids : int ();
native static method check_native_api_type_ids : int ();
native static method check_native_api_constant_values : int ();
native static method get_class_var : int ();
static method get_class_var_byte : int () {
$BYTE_VALUE = 0x0F;
my $success = TestCase::NativeAPI->get_class_var_byte_native();
unless ($success) {
return 0;
}
return 1;
}
native static method get_class_var_byte_native : int ();
static method get_class_var_int : int () {
$INT_VALUE = -2147483648;
my $success = TestCase::NativeAPI->get_class_var_byte_native();
unless ($success) {
return 0;
}
return 1;
}
native static method get_class_var_int_native : int ();
static method get_class_var_short : int () {
$SHORT_VALUE = -32768;
my $success = TestCase::NativeAPI->get_class_var_byte_native();
unless ($success) {
return 0;
}
return 1;
}
native static method get_class_var_short_native : int ();
static method get_class_var_long : int () {
$LONG_VALUE = 2147483647;
my $success = TestCase::NativeAPI->get_class_var_long_native();
unless ($success) {
return 0;
}
return 1;
}
native static method get_class_var_long_native : int ();
static method get_class_var_float : int () {
$FLOAT_VALUE = 3.402823e+38f;
my $success = TestCase::NativeAPI->get_class_var_float_native();
unless ($success) {
return 0;
}
return 1;
}
native static method get_class_var_float_native : int ();
static method get_class_var_double : int () {
$DOUBLE_VALUE = 1.79769e+308;
my $success = TestCase::NativeAPI->get_class_var_double_native();
unless ($success) {
return 0;
}
return 1;
}
native static method get_class_var_double_native : int ();
static method get_class_var_byte_by_name : int () {
$BYTE_VALUE = (byte)Fn->INT8_MIN;
my $success = TestCase::NativeAPI->get_class_var_byte_by_name_test();
unless ($success) {
return 0;
}
return 1;
}
native static method get_class_var_byte_by_name_test : byte ();
static method get_class_var_byte_by_name_exception : int () {
eval { TestCase::NativeAPI->get_class_var_byte_by_name_test_exception(); };
unless ($@) {
return 0;
}
$@ = undef;
return 1;
}
native static method get_class_var_byte_by_name_test_exception : byte ();
static method get_class_var_short_by_name : int () {
$BYTE_VALUE = (byte)Fn->INT8_MIN;
$SHORT_VALUE = (short)Fn->INT16_MIN;
my $success = TestCase::NativeAPI->get_class_var_short_by_name_test();
unless ($success) {
return 0;
}
return 1;
}
native static method get_class_var_short_by_name_test : short ();
static method get_class_var_short_by_name_exception : int () {
eval { TestCase::NativeAPI->get_class_var_short_by_name_test_exception(); };
unless ($@) {
return 0;
}
$@ = undef;
return 1;
}
native static method get_class_var_short_by_name_test_exception : short ();
static method get_class_var_int_by_name : int () {
$BYTE_VALUE = (byte)Fn->INT8_MIN;
$SHORT_VALUE = (short)Fn->INT16_MIN;
$INT_VALUE = Fn->INT32_MIN;
my $success = TestCase::NativeAPI->get_class_var_int_by_name_test();
unless ($success) {
return 0;
}
return 1;
}
native static method get_class_var_int_by_name_test : int ();
static method get_class_var_int_by_name_exception : int () {
eval { TestCase::NativeAPI->get_class_var_int_by_name_test_exception(); };
unless ($@) {
return 0;
}
$@ = undef;
return 1;
}
native static method get_class_var_int_by_name_test_exception : int ();
static method get_class_var_long_by_name : long () {
$BYTE_VALUE = (byte)Fn->INT8_MIN;
$SHORT_VALUE = (short)Fn->INT16_MIN;
$INT_VALUE = Fn->INT32_MIN;
$LONG_VALUE = Fn->INT64_MIN;
my $success = TestCase::NativeAPI->get_class_var_long_by_name_test();
unless ($success) {
return 0;
}
return 1;
}
native static method get_class_var_long_by_name_test : long ();
static method get_class_var_long_by_name_exception : long () {
eval { TestCase::NativeAPI->get_class_var_long_by_name_test_exception(); };
unless ($@) {
return 0;
}
$@ = undef;
return 1;
}
native static method get_class_var_long_by_name_test_exception : long ();
static method get_class_var_float_by_name : int () {
$BYTE_VALUE = (byte)Fn->INT8_MIN;
$SHORT_VALUE = (short)Fn->INT16_MIN;
$INT_VALUE = Fn->INT16_MIN;
$LONG_VALUE = Fn->INT16_MIN;
$FLOAT_VALUE = Fn->FLT_MIN;
my $success = TestCase::NativeAPI->get_class_var_float_by_name_test();
unless ($success) {
return 0;
}
return 1;
}
native static method get_class_var_float_by_name_test : float ();
static method get_class_var_float_by_name_exception : int () {
eval { TestCase::NativeAPI->get_class_var_float_by_name_test_exception(); };
unless ($@) {
return 0;
}
$@ = undef;
return 1;
}
native static method get_class_var_float_by_name_test_exception : float ();
static method get_class_var_double_by_name : int () {
$BYTE_VALUE = (byte)Fn->INT8_MIN;
$SHORT_VALUE = (short)Fn->INT16_MIN;
$INT_VALUE = Fn->INT32_MIN;
$LONG_VALUE = Fn->INT32_MIN;
$FLOAT_VALUE = Fn->FLT_MIN;
$DOUBLE_VALUE = Fn->DBL_MIN;
my $success = TestCase::NativeAPI->get_class_var_double_by_name_test();
unless ($success) {
return 0;
}
return 1;
}
native static method get_class_var_double_by_name_test : double ();
static method get_class_var_double_by_name_exception : int () {
eval { TestCase::NativeAPI->get_class_var_double_by_name_test_exception(); };
unless ($@) {
return 0;
}
$@ = undef;
return 1;
}
native static method get_class_var_double_by_name_test_exception : double ();
static method get_class_var_object_by_name : int () {
$MINIMAL_VALUE = TestCase::Minimal->new;
my $value = TestCase::NativeAPI->get_class_var_object_test();
unless ($value isa TestCase::Minimal) {
$MINIMAL_VALUE = undef;
return 0;
}
$MINIMAL_VALUE = undef;
return 1;
}
native static method get_class_var_object_test : TestCase::Minimal ();
static method get_class_var_object_by_name_exception : int () {
eval { TestCase::NativeAPI->get_class_var_object_by_name_test_exception(); };
unless ($@) {
return 0;
}
$@ = undef;
return 1;
}
native static method get_class_var_object_by_name_test_exception : object ();
static method set_class_var_byte_by_name : int () {
TestCase::NativeAPI->set_class_var_byte_by_name_test();
unless ($BYTE_VALUE == Fn->INT8_MIN) {
return 0;
}
unless ($SHORT_VALUE == Fn->INT8_MIN) {
return 0;
}
unless ($INT_VALUE == Fn->INT8_MIN) {
return 0;
}
unless ($LONG_VALUE == Fn->INT8_MIN) {
return 0;
}
unless ($FLOAT_VALUE == Fn->INT8_MIN) {
return 0;
}
unless ($DOUBLE_VALUE == Fn->INT8_MIN) {
return 0;
}
return 1;
}
native static method set_class_var_byte_by_name_test : void ();
static method set_class_var_byte_by_name_exception : int () {
eval { TestCase::NativeAPI->set_class_var_byte_by_name_test_exception(); };
unless ($@) {
return 0;
}
$@ = undef;
return 1;
}
native static method set_class_var_byte_by_name_test_exception : byte ();
static method set_class_var_short_by_name : int () {
TestCase::NativeAPI->set_class_var_short_by_name_test();
unless ($SHORT_VALUE == Fn->INT16_MIN) {
return 0;
}
unless ($INT_VALUE == Fn->INT16_MIN) {
return 0;
}
unless ($LONG_VALUE == Fn->INT16_MIN) {
return 0;
}
unless ($FLOAT_VALUE == Fn->INT16_MIN) {
return 0;
}
unless ($DOUBLE_VALUE == Fn->INT16_MIN) {
return 0;
}
return 1;
}
native static method set_class_var_short_by_name_test : void ();
static method set_class_var_short_by_name_exception : int () {
eval { TestCase::NativeAPI->set_class_var_short_by_name_test_exception(); };
unless ($@) {
return 0;
}
$@ = undef;
return 1;
}
native static method set_class_var_short_by_name_test_exception : short ();
static method set_class_var_int_by_name : int () {
TestCase::NativeAPI->set_class_var_int_by_name_test();
unless ($INT_VALUE == Fn->INT32_MIN) {
return 0;
}
unless ($LONG_VALUE == Fn->INT32_MIN) {
return 0;
}
unless ($FLOAT_VALUE == Fn->INT16_MIN) {
return 0;
}
unless ($DOUBLE_VALUE == Fn->INT32_MIN) {
return 0;
}
return 1;
}
native static method set_class_var_int_by_name_test : void ();
static method set_class_var_int_by_name_exception : int () {
eval { TestCase::NativeAPI->set_class_var_int_by_name_test_exception(); };
unless ($@) {
return 0;
}
$@ = undef;
return 1;
}
native static method set_class_var_int_by_name_test_exception : int ();
static method set_class_var_long_by_name : int () {
TestCase::NativeAPI->set_class_var_long_by_name_test();
unless ($LONG_VALUE == Fn->INT64_MIN) {
return 0;
}
unless ($FLOAT_VALUE == Fn->INT16_MIN) {
return 0;
}
unless ($DOUBLE_VALUE == Fn->INT32_MIN) {
return 0;
}
return 1;
}
native static method set_class_var_long_by_name_test : void ();
static method set_class_var_long_by_name_exception : int () {
eval { TestCase::NativeAPI->set_class_var_long_by_name_test_exception(); };
unless ($@) {
return 0;
}
$@ = undef;
return 1;
}
native static method set_class_var_long_by_name_test_exception : long ();
static method set_class_var_float_by_name : int () {
TestCase::NativeAPI->set_class_var_float_by_name_test();
unless ($FLOAT_VALUE == Fn->FLT_MIN) {
return 0;
}
unless ($DOUBLE_VALUE == Fn->FLT_MIN) {
return 0;
}
return 1;
}
native static method set_class_var_float_by_name_test : void ();
static method set_class_var_float_by_name_exception : int () {
eval { TestCase::NativeAPI->set_class_var_float_by_name_test_exception(); };
unless ($@) {
return 0;
}
$@ = undef;
return 1;
}
native static method set_class_var_float_by_name_test_exception : float ();
static method set_class_var_double_by_name : int () {
TestCase::NativeAPI->set_class_var_double_by_name_test();
unless ($DOUBLE_VALUE == Fn->DBL_MIN) {
return 0;
}
return 1;
}
native static method set_class_var_double_by_name_test : void ();
static method set_class_var_double_by_name_exception : int () {
eval { TestCase::NativeAPI->set_class_var_double_by_name_test_exception(); };
unless ($@) {
return 0;
}
$@ = undef;
return 1;
}
native static method set_class_var_double_by_name_test_exception : double ();
static method set_class_var_object_by_name : int () {
TestCase::NativeAPI->set_class_var_object_by_name_test();
if ($MINIMAL_VALUE isa TestCase::Minimal) {
$MINIMAL_VALUE = undef;
return 1;
}
return 0;
}
native static method set_class_var_object_by_name_test : void ();
static method set_class_var_object_by_name_exception : int () {
eval { TestCase::NativeAPI->set_class_var_object_by_name_test_exception(); };
unless ($@) {
return 0;
}
$@ = undef;
return 1;
}
native static method set_class_var_object_by_name_test_exception : object ();
native static method is_type_test_minimals : int ($object : object);
static method is_type : int () {
my $minimals = new TestCase::Minimal[3];
my $minimal = TestCase::Minimal->new;
my $simples = new TestCase::Simple[3];
unless (TestCase::NativeAPI->is_type_test_minimals($minimals)) {
return 0;
}
unless (!TestCase::NativeAPI->is_type_test_minimals($minimal)) {
return 0;
}
unless (!TestCase::NativeAPI->is_type_test_minimals($simples)) {
return 0;
}
return 1;
}
native static method ref_byte_sum : byte ($x_in : byte, $x_in2 : byte, $x_out : byte*);
static method ref_byte : int () {
my $out : byte;
my $out_ref = \$out;
TestCase::NativeAPI->ref_byte_sum(1, (byte)Fn->INT8_MIN, $out_ref);
if ($$out_ref == Fn->INT8_MIN + 1) {
return 1;
}
return 0;
}
native static method ref_short_sum : short ($x_in : short, $x_in2 : short, $x_out : short*);
static method ref_short : int () {
my $out : short;
my $out_ref = \$out;
TestCase::NativeAPI->ref_short_sum(1, (short)Fn->INT16_MIN, $out_ref);
if ($$out_ref == Fn->INT16_MIN + 1) {
return 1;
}
return 0;
}
native static method ref_int_sum : int ($x_in : int, $x_in2 : int, $x_out : int*);
static method ref_int : int () {
my $out : int;
my $out_ref = \$out;
TestCase::NativeAPI->ref_int_sum(1, Fn->INT32_MIN, $out_ref);
if ($$out_ref == Fn->INT32_MIN + 1) {
return 1;
}
return 0;
}
native static method ref_long_sum : long ($x_in : long, $x_in2 : long, $x_out : long*);
static method ref_long : int () {
my $out : long;
my $out_ref = \$out;
TestCase::NativeAPI->ref_long_sum(1, Fn->INT64_MIN, $out_ref);
if ($$out_ref == Fn->INT64_MIN + 1) {
return 1;
}
return 0;
}
native static method ref_float_sum : float ($x_in : float, $x_in2 : float, $x_out : float*);
static method ref_float : int () {
my $out : float;
my $out_ref = \$out;
TestCase::NativeAPI->ref_float_sum(0.25f, Fn->FLT_MIN, $out_ref);
if ($$out_ref == Fn->FLT_MIN + 0.25f) {
return 1;
}
return 0;
}
native static method ref_double_sum : double ($x_in : double, $x_in2 : double, $x_out : double*);
static method ref_double : int () {
my $out : double;
my $out_ref = \$out;
TestCase::NativeAPI->ref_double_sum(0.25, Fn->DBL_MIN, $out_ref);
if ($$out_ref == Fn->DBL_MIN + 0.25) {
return 1;
}
return 0;
}
static method set_field_byte_by_name : int () {
my $simple = TestCase::Simple->new;
TestCase::NativeAPI->native_set_field_byte_by_name($simple);
unless ($simple->{byte_value} == Fn->INT8_MIN) {
return 0;
}
unless ($simple->{short_value} == Fn->INT8_MIN) {
return 0;
}
unless ($simple->{int_value} == Fn->INT8_MIN) {
return 0;
}
unless ($simple->{long_value} == Fn->INT8_MIN) {
return 0;
}
unless ($simple->{float_value} == Fn->INT8_MIN) {
return 0;
}
unless ($simple->{double_value} == Fn->INT8_MIN) {
return 0;
}
return 1;
}
native static method native_set_field_byte_by_name : void ($simple : TestCase::Simple);
static method set_field_byte_by_name_exception : int () {
my $simple = TestCase::Simple->new;
eval { TestCase::NativeAPI->native_set_field_byte_by_name_exception($simple); };
unless ($@) {
return 0;
}
$@ = 0;
return 1;
}
native static method native_set_field_byte_by_name_exception : void ($simple : TestCase::Simple);
static method set_field_short_by_name : int () {
my $simple = TestCase::Simple->new;
TestCase::NativeAPI->native_set_field_short_by_name($simple);
unless ($simple->{short_value} == Fn->INT16_MIN) {
return 0;
}
unless ($simple->{int_value} == Fn->INT16_MIN) {
return 0;
}
unless ($simple->{long_value} == Fn->INT16_MIN) {
return 0;
}
unless ($simple->{float_value} == Fn->INT16_MIN) {
return 0;
}
unless ($simple->{double_value} == Fn->INT16_MIN) {
return 0;
}
return 1;
}
native static method native_set_field_short_by_name : void ($simple : TestCase::Simple);
static method set_field_short_by_name_exception : int () {
my $simple = TestCase::Simple->new;
eval { TestCase::NativeAPI->native_set_field_short_by_name_exception($simple); };
unless ($@) {
return 0;
}
$@ = undef;
return 1;
}
native static method native_set_field_short_by_name_exception : void ($simple : TestCase::Simple);
static method set_field_int_by_name : int () {
my $simple = TestCase::Simple->new;
TestCase::NativeAPI->native_set_field_int_by_name($simple);
unless ($simple->{int_value} == Fn->INT32_MIN) {
return 0;
}
unless ($simple->{long_value} == Fn->INT32_MIN) {
return 0;
}
unless ($simple->{float_value} == Fn->INT16_MIN) {
return 0;
}
unless ($simple->{double_value} == Fn->INT32_MIN) {
return 0;
}
return 1;
}
native static method native_set_field_int_by_name : void ($simple : TestCase::Simple);
static method set_field_int_by_name_exception : int () {
my $simple = TestCase::Simple->new;
eval { TestCase::NativeAPI->native_set_field_int_by_name_exception($simple); };
unless ($@) {
return 0;
}
$@ = undef;
return 1;
}
native static method native_set_field_int_by_name_exception : void ($simple : TestCase::Simple);
static method set_field_long_by_name : int () {
my $simple = TestCase::Simple->new;
TestCase::NativeAPI->native_set_field_long_by_name($simple);
unless ($simple->{long_value} == Fn->INT64_MIN) {
return 0;
}
unless ($simple->{float_value} == Fn->INT16_MIN) {
return 0;
}
unless ($simple->{double_value} == Fn->INT32_MIN) {
return 0;
}
return 1;
}
native static method native_set_field_long_by_name : void ($simple : TestCase::Simple);
static method set_field_long_by_name_exception : int () {
my $simple = TestCase::Simple->new;
eval { TestCase::NativeAPI->native_set_field_long_by_name_exception($simple); };
unless ($@) {
return 0;
}
$@ = undef;
return 1;
}
native static method native_set_field_long_by_name_exception : void ($simple : TestCase::Simple);
static method set_field_float_by_name : int () {
my $simple = TestCase::Simple->new;
TestCase::NativeAPI->native_set_field_float_by_name($simple);
unless ($simple->{float_value} == Fn->FLT_MIN) {
return 0;
}
unless ($simple->{double_value} == Fn->FLT_MIN) {
return 0;
}
return 1;
}
native static method native_set_field_float_by_name : void ($simple : TestCase::Simple);
static method set_field_float_by_name_exception : int () {
my $simple = TestCase::Simple->new;
eval { TestCase::NativeAPI->native_set_field_float_by_name_exception($simple); };
unless ($@) {
return 0;
}
$@ = undef;
return 1;
}
native static method native_set_field_float_by_name_exception : void ($simple : TestCase::Simple);
static method set_field_double_by_name : int () {
my $simple = TestCase::Simple->new;
TestCase::NativeAPI->native_set_field_double_by_name($simple);
unless ($simple->{double_value} == Fn->DBL_MIN) {
return 0;
}
return 1;
}
native static method native_set_field_double_by_name : void ($simple : TestCase::Simple);
static method set_field_double_by_name_exception : int () {
my $simple = TestCase::Simple->new;
eval { TestCase::NativeAPI->native_set_field_double_by_name_exception($simple); };
unless ($@) {
return 0;
}
return 1;
}
native static method native_set_field_double_by_name_exception : void ($simple : TestCase::Simple);
static method set_field_object_by_name : int () {
my $simple = TestCase::Simple->new;
TestCase::NativeAPI->native_set_field_object_by_name($simple);
unless ($simple->{object_value}{x} == 3) {
return 0;
}
return 1;
}
native static method native_set_field_object_by_name : int ($simple : TestCase::Simple);
static method set_field_object_by_name_exception : int () {
my $simple = TestCase::Simple->new;
eval { TestCase::NativeAPI->native_set_field_object_by_name_exception($simple); };
unless ($@) {
return 0;
}
$@ = undef;
return 1;
}
native static method native_set_field_object_by_name_exception : int ($simple : TestCase::Simple);
static method get_field_byte_by_name : int () {
my $simple = TestCase::Simple->new;
$simple->{byte_value} = (byte)Fn->INT8_MIN;
my $success = TestCase::NativeAPI->native_get_field_byte_by_name($simple);
return $success;
}
native static method native_get_field_byte_by_name : int ($simple : TestCase::Simple);
static method get_field_byte_by_name_exception : int () {
my $simple = TestCase::Simple->new;
$simple->{byte_value} = (byte)Fn->INT8_MIN;
eval { TestCase::NativeAPI->native_get_field_byte_by_name_exception($simple); };
unless ($@) {
return 0;
}
$@ = undef;
return 1;
}
native static method native_get_field_byte_by_name_exception : int ($simple : TestCase::Simple);
static method get_field_short_by_name : int () {
my $simple = TestCase::Simple->new;
$simple->{byte_value} = (byte)Fn->INT8_MIN;
$simple->{short_value} = (short)Fn->INT16_MIN;
my $success = TestCase::NativeAPI->native_get_field_short_by_name($simple);
return $success;
}
native static method native_get_field_short_by_name : int ($simple : TestCase::Simple);
static method get_field_short_by_name_exception : int () {
my $simple = TestCase::Simple->new;
$simple->{short_value} = (short)Fn->INT16_MIN;
eval { TestCase::NativeAPI->native_get_field_short_by_name_exception($simple); };
unless ($@) {
return 0;
}
$@ = undef;
return 1;
}
native static method native_get_field_short_by_name_exception : int ($simple : TestCase::Simple);
static method get_field_int_by_name : int () {
my $simple = TestCase::Simple->new;
$simple->{byte_value} = (byte)Fn->INT8_MIN;
$simple->{short_value} = (short)Fn->INT16_MIN;
$simple->{int_value} = Fn->INT32_MIN;
my $success = TestCase::NativeAPI->native_get_field_int_by_name($simple);
return $success;
}
native static method native_get_field_int_by_name : int ($simple : TestCase::Simple);
static method get_field_int_by_name_exception : int () {
my $simple = TestCase::Simple->new;
$simple->{int_value} = Fn->INT32_MIN;
eval { TestCase::NativeAPI->native_get_field_int_by_name_exception($simple); };
unless ($@) {
return 0;
}
$@ = undef;
return 1;
}
native static method native_get_field_int_by_name_exception : int ($simple : TestCase::Simple);
static method get_field_long_by_name : int () {
my $simple = TestCase::Simple->new;
$simple->{byte_value} = (byte)Fn->INT8_MIN;
$simple->{short_value} = (short)Fn->INT16_MIN;
$simple->{int_value} = Fn->INT32_MIN;
$simple->{long_value} = Fn->INT64_MIN;
my $success = TestCase::NativeAPI->native_get_field_long_by_name($simple);
return $success;
}
native static method native_get_field_long_by_name : int ($simple : TestCase::Simple);
static method get_field_long_by_name_exception : int () {
my $simple = TestCase::Simple->new;
$simple->{long_value} = Fn->INT64_MIN;
eval { TestCase::NativeAPI->native_get_field_long_by_name_exception($simple) ; };
unless ($@) {
return 0;
}
$@ = undef;
return 1;
}
native static method native_get_field_long_by_name_exception : int ($simple : TestCase::Simple);
static method get_field_float_by_name : int () {
my $simple = TestCase::Simple->new;
$simple->{byte_value} = (byte)Fn->INT8_MIN;
$simple->{short_value} = (short)Fn->INT16_MIN;
$simple->{int_value} = Fn->INT16_MIN;
$simple->{long_value} = Fn->INT32_MIN;
$simple->{float_value} = Fn->FLT_MIN;
my $success = TestCase::NativeAPI->native_get_field_float_by_name($simple);
return $success;
}
native static method native_get_field_float_by_name : int ($simple : TestCase::Simple);
static method get_field_float_by_name_exception : int () {
my $simple = TestCase::Simple->new;
$simple->{float_value} = Fn->FLT_MIN;
eval { TestCase::NativeAPI->native_get_field_float_by_name_exception($simple); };
unless ($@) {
return 0;
}
$@ = undef;
return 1;
}
native static method native_get_field_float_by_name_exception : int ($simple : TestCase::Simple);
static method get_field_double_by_name : int () {
my $simple = TestCase::Simple->new;
$simple->{byte_value} = (byte)Fn->INT8_MIN;
$simple->{short_value} = (short)Fn->INT16_MIN;
$simple->{int_value} = Fn->INT32_MIN;
$simple->{long_value} = Fn->INT32_MIN;
$simple->{float_value} = Fn->FLT_MIN;
$simple->{double_value} = Fn->DBL_MIN;
my $success = TestCase::NativeAPI->native_get_field_double_by_name($simple);
return $success;
}
native static method native_get_field_double_by_name : int ($simple : TestCase::Simple);
static method get_field_double_by_name_exception : int () {
my $simple = TestCase::Simple->new;
$simple->{double_value} = Fn->DBL_MIN;
eval { TestCase::NativeAPI->native_get_field_double_by_name_exception($simple); };
unless ($@) {
return 0;
}
$@ = undef;
return 1;
}
native static method native_get_field_double_by_name_exception : int ($simple : TestCase::Simple);
static method get_field_object_by_name : int () {
my $simple = TestCase::Simple->new;
$simple->{object_value} = TestCase::Minimal->new;
$simple->{object_value}{x} = 5;
my $success = TestCase::NativeAPI->native_get_field_object_by_name($simple);
return $success;
}
native static method native_get_field_object_by_name : int ($simple : TestCase::Simple);
static method get_field_object_by_name_exception : int () {
my $simple = TestCase::Simple->new;
$simple->{object_value} = TestCase::Minimal->new;
$simple->{object_value}{x} = 5;
eval { TestCase::NativeAPI->native_get_field_object_by_name_exception($simple); };
unless ($@) {
return 0;
}
return 1;
}
native static method native_get_field_object_by_name_exception : int ($simple : TestCase::Simple);
static method get_field_string_chars_by_name : int () {
my $simple = TestCase::Simple->new;
$simple->{string_value} = "abc";
my $success = TestCase::NativeAPI->native_get_field_string_chars_by_name($simple);
return $success;
}
native static method native_get_field_string_chars_by_name : int ($simple : TestCase::Simple);
static method get_field_string_chars_by_name_exception : int () {
my $simple = TestCase::Simple->new;
$simple->{string_value} = "abc";
my $success = TestCase::NativeAPI->native_get_field_string_chars_by_name_exception($simple);
return $success;
}
native static method native_get_field_string_chars_by_name_exception : int ($simple : TestCase::Simple);
static method spvm_extension_add_int_array : int () {
my $nums1 = [1, 2, 3];
my $nums2 = [4, 5, 6];
my $nums3 = TestCase::NativeAPI->add_int_array($nums1, $nums2);
if ($nums3->[0] == 5) {
if ($nums3->[1] == 7) {
if ($nums3->[2] == 9) {
return 1;
}
}
}
return 0;
}
static method spvm_extension : int () {
my $total = TestCase::NativeAPI->sum(2, 3);
if ($total == 5) {
return 1;
}
return 0;
}
static method native_use_strlen_test : int () {
my $string = "abcde";
my $length = TestCase::NativeAPI->native_use_strlen($string);
if ($length == 5) {
return 1;
}
return 0;
}
native static method native_use_strlen : int ($string : string);
native static method native_env_get_field_byte : byte ($test_case : TestCase);
native static method native_env_get_field_short : short ($test_case : TestCase);
native static method native_env_get_field_int : int ($test_case : TestCase);
native static method native_env_get_field_long : long ($test_case : TestCase);
native static method native_env_get_field_float : float ($test_case : TestCase);
native static method native_env_get_field_double : double ($test_case : TestCase);
native static method native_env_get_field_object : TestCase::Minimal ($test_case : TestCase);
static method native_env_set_field : int () {
my $test_case = TestCase->new();
$test_case->{x_byte} = (byte)1;
$test_case->{x_short} = (short)2;
$test_case->{x_int} = 3;
$test_case->{x_long} = 4L;
$test_case->{x_float} = 0.5f;
$test_case->{x_double} = 0.025;
my $minimal1 = TestCase::Minimal->new();
$test_case->{minimal} = $minimal1;
my $x_byte1 = TestCase::NativeAPI->native_env_get_field_byte($test_case);
my $x_short1 = TestCase::NativeAPI->native_env_get_field_short($test_case);
my $x_int1 = TestCase::NativeAPI->native_env_get_field_int($test_case);
my $x_long1 = TestCase::NativeAPI->native_env_get_field_long($test_case);
my $x_float1 = TestCase::NativeAPI->native_env_get_field_float($test_case);
my $x_double1 = TestCase::NativeAPI->native_env_get_field_double($test_case);
my $minimal2 = TestCase::NativeAPI->native_env_get_field_object($test_case);
if ((int)$x_byte1 == (int)(byte)1) {
if ((int)$x_short1 == (int)(short)2) {
if ($x_int1 == 3) {
if ($x_long1 == 4L) {
if ($x_float1 == 0.5f) {
if ($x_double1 == 0.025) {
if ($minimal1 == $minimal2) {
return 1;
}
}
}
}
}
}
}
}
native static method sum : int ($num1 : int, $num2 : int);
native static method add_int_array : int[] ($nums1 : int[], $nums2 : int[]);
static method call_void_method_exception : int () {
eval {
TestCase::NativeAPI->call_void_method_exception_native();
};
if ($@) {
return 1;
}
return 0;
}
static method call_byte_method_exception : int () {
eval {
TestCase::NativeAPI->call_byte_method_exception_native();
};
if ($@) {
return 1;
}
return 0;
}
static method call_short_method_exception : int () {
eval {
TestCase::NativeAPI->call_short_method_exception_native();
};
if ($@) {
return 1;
}
return 0;
}
static method call_int_method_exception : int () {
eval {
TestCase::NativeAPI->call_int_method_exception_native();
};
if ($@) {
return 1;
}
return 0;
}
static method call_long_method_exception : int () {
eval {
TestCase::NativeAPI->call_long_method_exception_native();
};
if ($@) {
return 1;
}
return 0;
}
static method call_float_method_exception : int () {
eval {
TestCase::NativeAPI->call_float_method_exception_native();
};
if ($@) {
return 1;
}
return 0;
}
static method call_double_method_exception : int () {
eval {
TestCase::NativeAPI->call_double_method_exception_native();
};
if ($@) {
return 1;
}
return 0;
}
static method call_object_method_exception : int () {
eval {
TestCase::NativeAPI->call_object_method_exception_native();
};
if ($@) {
return 1;
}
return 0;
}
native static method call_void_method_exception_native : void ();
native static method call_byte_method_exception_native : byte ();
native static method call_short_method_exception_native : short ();
native static method call_int_method_exception_native : int ();
native static method call_long_method_exception_native : long ();
native static method call_float_method_exception_native : float ();
native static method call_double_method_exception_native : double ();
native static method call_object_method_exception_native : double ();
native static method mortal_api : int ();
native static method enter_scope_leave_scope : int ();
native static method push_mortal_multi : int ();
static method my_value : int ($value : int) { return $value; }
native static method native_call_method_no_mortal : int ();
native static method native_call_method : int ();
native static method native_call_class_method_by_name : int ();
native static method native_call_class_method_by_name_exception : int ();
static method call_instance_method_static_by_name : int () {
my $minimal = TestCase::Minimal->new;
$minimal->set_x(5);
my $value = &call_instance_method_static_by_name_native_value($minimal);
unless ($value == 5) {
return 0;
}
my $native_ret = &call_instance_method_static_by_name_native;
unless ($native_ret) {
return 0;
}
return 1;
}
native static method call_instance_method_static_by_name_native : int ();
native static method call_instance_method_static_by_name_native_value : int ($minimal : TestCase::Minimal);
static method call_instance_method_static_by_name_exception : int () {
my $minimal = TestCase::Minimal->new;
$minimal->set_x(5);
&call_instance_method_static_by_name_exception_native($minimal);
return 1;
}
native static method call_instance_method_static_by_name_exception_native : int ($minimal : TestCase::Minimal);
static method call_instance_method_by_name : int () {
my $minimal = TestCase::Minimal->new;
$minimal->set_x(5);
my $value = &call_instance_method_by_name_native_value($minimal);
unless ($value == 5) {
return 0;
}
my $native_ret = &call_instance_method_by_name_native;
unless ($native_ret) {
return 0;
}
return 1;
}
native static method call_instance_method_by_name_native : int ();
native static method call_instance_method_by_name_native_value : int ($minimal : TestCase::Minimal);
static method call_instance_method_by_name_exception : int () {
my $minimal = TestCase::Minimal->new;
$minimal->set_x(5);
&call_instance_method_by_name_exception_native($minimal);
return 1;
}
native static method call_instance_method_by_name_exception_native : int ($minimal : TestCase::Minimal);
static method new_object_by_name : int () {
my $minimal = TestCase::NativeAPI->native_new_object_by_name();
unless ($minimal isa TestCase::Minimal) {
return 0;
}
unless ($minimal isa TestCase::Minimal) {
return 0;
}
return 1;
}
native static method native_new_object_by_name : TestCase::Minimal ();
static method new_object_by_name_exception : int () {
my $minimal : TestCase::Minimal;
eval { $minimal = TestCase::NativeAPI->native_new_object_by_name_exception(); };
unless ($@) {
return 0;
}
if ($minimal) {
return 0;
}
$@ = undef;
return 1;
}
native static method native_new_object_by_name_exception : TestCase::Minimal ();
static method new_pointer_object_by_name : int () {
my $pointer = TestCase::Pointer->new(3);
unless ($pointer isa TestCase::Pointer) {
return 0;
}
unless ($pointer->get_x == 3) {
return 0;
}
return 1;
}
static method new_pointer_object_by_name_exception : int () {
my $pointer : TestCase::Pointer;
eval { $pointer = TestCase::NativeAPI->native_new_pointer_object_by_name_exception(); };
unless ($@) {
return 0;
}
$@ = undef;
return 1;
}
native static method native_new_pointer_object_by_name_exception : TestCase::Pointer ();
static method get_instance_method_static : int () {
my $minimal = TestCase::Minimal->new;
$minimal->set_x(4);
my $x = &get_instance_method_static_native($minimal);
unless ($x == 4) {
return 0;
}
return 1;
}
native static method get_instance_method_static_native : int ($minimal : TestCase::Minimal);
static method get_bool_object_value : int () {
# true
{
my $true = true;
my $value = &get_bool_object_value_native($true);
unless ($value == 1) {
return 0;
}
}
# false
{
my $false = false;
my $value = &get_bool_object_value_native($false);
unless ($value == 0) {
return 0;
}
}
return 1;
}
native static method get_bool_object_value_native : int ($bool_object : Bool);
native static method get_byte_object_value : int ();
native static method get_short_object_value : int ();
native static method get_int_object_value : int ();
native static method get_long_object_value : int ();
native static method get_float_object_value : int ();
native static method get_double_object_value : int ();
native static method new_string_no_mortal : int ();
native static method new_string : int ();
native static method new_string_nolen_no_mortal : int ();
native static method new_string_nolen : int ();
native static method get_basic_type_id : int ();
native static method strerror_string : int ();
native static method strerror_value : string ($errno_value : int);
native static method strerror_nolen_value : string ($errno_value : int);
native static method strerror_string_value : string ($errno_value : int);
native static method strerror_string_nolen_value : string ($errno_value : int);
native static method new_object_array_no_mortal : int ();
native static method new_object_array : int ();
native static method new_string_array : int ();
native static method new_string_array_value : string[] ();
static method args_width : int () {
{
my $args_length = &args_width_0;
unless ($args_length == 0) {
return 0;
}
}
{
my $args_length = &args_width_1(0);
unless ($args_length == 1) {
return 0;
}
}
{
my $args_length = &args_width_2(0);
unless ($args_length == 1) {
return 0;
}
}
{
my $args_length = &args_width_2(0, 0);
unless ($args_length == 2) {
return 0;
}
}
{
my $z : Complex_2d;
my $args_length = &args_width_4($z, 0, 0);
unless ($args_length == 4) {
return 0;
}
}
{
my $z : Complex_2d;
my $args_length = &args_width_4($z);
unless ($args_length == 2) {
return 0;
}
}
return 1;
}
native static method args_width_0 : int ();
native static method args_width_1 : int ($args0 : int);
native static method args_width_2 : int ($args0 : int, $args1 : int = 0);
native static method args_width_4 : int ($args_2d : Complex_2d, $args0 : int = 0, $args1 : int = 0);
native static method default_all_types_native : int (
$value_byte : byte = -128,
$value_short : short = -32768,
$value_int : int = -2147483648,
$value_long : long = -9223372036854775808L,
$value_float : float = 1.5f,
$value_double : double = -2147483648.5,
$value_object : object = undef,
);
static method default_all_types : int () {
{
my $success = &default_all_types_native(1, 2, 3, 4, 5.5f, 6.5, Int->new(1));
unless ($success) {
return 0;
}
}
{
my $success = &default_all_types_native();
unless ($success) {
return 0;
}
}
return 1;
}
native static method dumpc : int ();
native static method precompile_build_methodd_source : int ();
native static method get_compile_type_name : int ();
native static method runtime_get_method_is_enum : int ();
native static method check_stdio_binary_mode : int ();
static method get_string_field : int () {
my $na = new TestCase::NativeAPI;
$na->set_text("Hello");
$na->set_draw_left(1);
$na->set_draw_top(2);
$na->set_draw_width(3);
$na->set_draw_height(4);
my $ret = $na->get_string_field_native;
return $ret;
}
native method get_string_field_native : int ();
static method floating_point_constant : int () {
{
my $float_value1 = 1.02f;
my $dobule_value1 = 1.5e+300;
my $success = &floating_point_constant_native($float_value1, $dobule_value1);
unless ($success) {
return 0;
}
}
return 1;
}
native static method floating_point_constant_native : int (
$float_value1 : float,
$double_value1 : double,
);
static method call_method_in_precompile_class : int () {
my $ret = TestCase::PrecompileClassAttribute->foo;
unless ($ret == 1) {
return 0;
}
return 1;
}
native static method save_stdout_windows_binary_mode : int ();
native static method save_stderr_windows_binary_mode : int ();
native static method save_stdin_windows_binary_mode : int ();
native static method get_object_basic_type_name : int ();
native static method freopen_stdout : void ($path : string);
native static method close_stdout : void ();
native static method freopen_stderr : void ($path : string);
native static method close_stderr : void ();
native static method spvm_stdin : int ();
native static method spvm_stdout : int ();
native static method spvm_stderr : int ();
method instance_method : void () {}
static method class_method : void () {}
native static method spvm_warn : int ();
native static method spvm_warnf : int ();
native static method no_free : int ();
native static method die : int ();
native static method print_exception_to_stderr : int ();
native static method extra : int ();
}