class TestCase::Object {
  use TestCase::Minimal;
  use TestCase::Simple;
  
  use TestCase::Destructor;
  use Fn;
  
  has INT32_MAX : int;
  has next : int;
  
  static method isa_basic : int () {
    my $minimal = TestCase::Minimal->new;
    if ($minimal isa TestCase::Minimal) {
      if (!($minimal isa TestCase)) {
        return 1;
      }
    }
    
    return 0;
  }

  static method destructor : int () {
    my $minimal = TestCase::Minimal->new();
    TestCase::Object->destructor_call($minimal);
    
    if ($minimal->{x} == 3) {
      return 1;
    }
    return 0;
  }
  
  static method destructor_call : int ($minimal: TestCase::Minimal) {
    my $dest = TestCase::Destructor->new();
    $dest->{minimal} = $minimal;
  }
}