class TestCase::Operator::IsCompileType {
  use TestCase::Minimal;
  use TestCase::Simple;
  use Comparator;
  use Complex_2d;
  use Complex_2f;
  use Stringer;

  static method is_compile_type : int () {
    {
      my $value : int;
      unless ($value is_compile_type int) {
        return 0;
      }
    }
    
    {
      my $value : int[];
      unless ($value is_compile_type int[]) {
        return 0;
      }
    }
    
    {
      my $object : object = new TestCase::Minimal;
      unless ($object is_compile_type object) {
        return 0;
      }
    }
    
    {
      my $object : TestCase::Minimal;
      unless ($object is_compile_type TestCase::Minimal) {
        return 0;
      }
    }
    
    {
      my $value : Stringer = method : string ($object : object) { return "aaa"; };
      unless ($value is_compile_type Stringer) {
        return 0;
      }
    }
    
    {
      my $value : Complex_2d;
      unless ($value is_compile_type Complex_2d) {
        return 0;
      }
    }
    
    {
      my $value_ref : int*;
      unless ($value_ref is_compile_type int*) {
        return 0;
      }
    }
    
    {
      my $object : Bool;
      unless ($object is_compile_type Bool) {
        return 0;
      }
    }
    
    {
      my $string : string;
      unless ($string is_compile_type string) {
        return 0;
      }
      
      if ($string is_compile_type mutable string) {
        return 0;
      }
    }
    
    {
      my $string : mutable string;
      unless ($string is_compile_type mutable string) {
        return 0;
      }
      
      if ($string is_compile_type string) {
        return 0;
      }
      
    }
    
    {
      my $obj = (Hash of List of string)undef;
      unless ($obj is_compile_type Hash of List of string) {
        return 0;
      }
    }
    
    {
      my $obj = (Hash of List of string)undef;
      unless ($obj is_compile_type Hash of List) {
        return 0;
      }
    }
    
    {
      my $obj = (Hash of List of string)undef;
      unless ($obj is_compile_type Hash) {
        return 0;
      }
    }
    
    {
      my $obj = (Hash of List of string)undef;
      if ($obj is_compile_type Hash of List of string of int) {
        return 0;
      }
    }
    
    return 1;
  }
}
