class TestCase::Operator::TypeName {
  use TestCase::Minimal;
  use TestCase::Simple;
  
  static method type_name : int () {
    {
      my $minimal = TestCase::Minimal->new;
      
      unless (type_name $minimal eq "TestCase::Minimal") {
        return 0;
      }
    }
    {
      my $minimal = TestCase::Minimal->new;
      my $type_name = type_name $minimal;
      
      unless ($type_name eq "TestCase::Minimal") {
        return 0;
      }
    }
    {
      my $obj = new TestCase::Minimal[3];
      my $type_name = type_name $obj;
      
      unless ($type_name eq "TestCase::Minimal[]") {
        return 0;
      }
    }
    {
      my $obj = new TestCase::Minimal[][3];
      my $type_name = type_name $obj;
      
      unless ($type_name eq "TestCase::Minimal[][]") {
        return 0;
      }
    }

    {
      my $obj : object = undef;
      my $type_name = type_name $obj;
      
      unless ($type_name == undef) {
        return 0;
      }
    }
    
    return 1;
  }
}
