class TestCase::Simple : public {
  interface TestCase::CommonInterface;

  use TestCase::EnumA;
  use TestCase::Minimal;

  has x : public int;
  has y : public int;
  has values1 : public int[];
  has values2 : public long[];
  has message : public byte[];
  # has c : TestCase::Simple;
  # has d : TestCase::Simple[];
  has private_field : int;
  
  has title : public int;
  
  has minimal : rw public TestCase::Minimal;
  
  method shared1 : string () {
    return "TestCase::Simple->shared1";
  }
  
  method shared2 : string () {
    return "TestCase::Simple->shared2";
  }
  
  static method new : TestCase::Simple () {
    return new TestCase::Simple;
  }

  static method get2 : int () {
    1;
    my $var1 : int;
    my $var2 : int;
    
    return 0;
  }

  static method get3 : int () { return 0; }
  static method get4 : int ($foo : int) { return 0; }
  static method get7 : int ($foo : int, $bar : int) { return 0; }

  method sum4 : int () {
    
    my $title : int;
   
    # $title->();
    # $title->(1);
    # $title->(1, 2);

    $self->{x};
    $self->sum5();

    $self->{x} = 3;

    my $char : byte = 'a';
    
    return 0;
  }
  
  method sum5 : int () {
    $self->{x};
    
    return 0;
  }
  
  static method file : string () {
    my $file = __FILE__;
    return $file;
  }
}
