class TestCase::Field {
use TestCase;
use TestCase::Minimal;
use TestCase::Simple;
use TestCase::Destructor;
use Fn;
has INT32_MAX : int;
has next : int;
static method FLOAT_PRECICE : float () { return 16384.5f; }
static method DOUBLE_PRECICE : double () { return 65536.5; }
static method get_and_set_filed_same_name_as_keyword : int () {
my $self = new TestCase::Field;
$self->{next} = 1;
unless ($self->{next} == 1) {
return 0;
}
return 1;
}
static method get_field_chain : int () {
{
my $simple = TestCase::Simple->new;
my $minimal = TestCase::Minimal->new;
$minimal->set_x(5);
$simple->set_minimal($minimal);
my $x = $simple->minimal->x;
unless ($x == 5) {
return 0;
}
}
{
my $minimal = TestCase::Minimal->new;
my $new_minimal = TestCase::Minimal->new;
$minimal->set_x(3);
$minimal->set_y(5);
$new_minimal->set_x($minimal->y);
$new_minimal->set_y($minimal->x);
unless ($new_minimal->x == 5) {
return 0;
}
unless ($new_minimal->y == 3) {
return 0;
}
}
return 1;
}
static method core_func_name_field_name : int () {
my $self = new TestCase::Field;
$self->{INT32_MAX} = 1;
unless ($self->{INT32_MAX} == 1) {
return 0;
}
return 1;
}
# object field is initialized zero
static method object_field_initialized_zero : int () {
my $obj = TestCase->new;
if ($obj->{x_byte} == 0) {
if ($obj->{x_int} == 0) {
if ($obj->{x_byte_array} == undef) {
return 1;
}
}
}
return 0;
}
# object field set and get
static method object_field_set_and_get : int () {
my $test_case =TestCase->new;
$test_case->{x_byte} = Fn->INT8_MAX();
$test_case->{x_short} = Fn->INT16_MAX();
$test_case->{x_int} = Fn->INT32_MAX();
$test_case->{x_long} = Fn->INT64_MAX();
$test_case->{x_float} = TestCase->FLOAT_PRECICE();
$test_case->{x_double} = TestCase->DOUBLE_PRECICE();
my $minimal = TestCase::Minimal->new();
$minimal->{x} = 3;
$test_case->{minimal} = $minimal;
if ((int)$test_case->{x_byte} == (int)Fn->INT8_MAX()) {
if ((int)$test_case->{x_short} == (int)Fn->INT16_MAX()) {
if ($test_case->{x_int} == Fn->INT32_MAX()) {
if ($test_case->{x_long} == Fn->INT64_MAX()) {
if ($test_case->{x_float} == TestCase->FLOAT_PRECICE()) {
if ($test_case->{x_double} == TestCase->DOUBLE_PRECICE()) {
if ($test_case->{minimal}->{x} == 3) {
return 1;
}
}
}
}
}
}
}
return 0;
}
# object field set and get
static method object_field_set_and_get_again : int () {
my $test_case =TestCase->new;
$test_case->{x_byte} = Fn->INT8_MAX();
$test_case->{x_short} = Fn->INT16_MAX();
$test_case->{x_int} = Fn->INT32_MAX();
$test_case->{x_long} = Fn->INT64_MAX();
$test_case->{x_float} = TestCase::Field->FLOAT_PRECICE();
$test_case->{x_double} = TestCase::Field->DOUBLE_PRECICE();
my $minimal = TestCase::Minimal->new();
$minimal->{x} = 3;
$test_case->{minimal} = $minimal;
$test_case->{x_byte} = Fn->INT8_MAX();
$test_case->{x_short} = Fn->INT16_MAX();
$test_case->{x_int} = Fn->INT32_MAX();
$test_case->{x_long} = Fn->INT64_MAX();
$test_case->{x_float} = TestCase::Field->FLOAT_PRECICE();
$test_case->{x_double} = TestCase::Field->DOUBLE_PRECICE();
$test_case->{minimal} = $minimal;
if ((int)$test_case->{x_byte} == (int)Fn->INT8_MAX()) {
if ((int)$test_case->{x_short} == (int)Fn->INT16_MAX()) {
if ($test_case->{x_int} == Fn->INT32_MAX()) {
if ($test_case->{x_long} == Fn->INT64_MAX()) {
if ($test_case->{x_float} == TestCase::Field->FLOAT_PRECICE()) {
if ($test_case->{x_double} == TestCase::Field->DOUBLE_PRECICE()) {
if ($test_case->{minimal}->{x} == 3) {
return 1;
}
}
}
}
}
}
}
return 0;
}
}