class TestCase::If {
  
  static method if_bool : int () {
    
    # Bool - byte true
    {
      my $pass = 0;
      if ((byte)1) {
        $pass = 1;
      }
      else {
        $pass = 0;
      }
      
      unless ($pass) {
        return 0;
      }
    }

    # Bool - short
    {
      my $pass = 0;
      if ((short)1) {
        $pass = 1;
      }
      if ((short)0) {
        $pass = 0;
      }
      unless ($pass) {
        return 0;
      }
    }
    
    # Bool - int
    {
      my $pass = 0;
      if (1) {
        $pass = 1;
      }
      if (0) {
        $pass = 0;
      }
      unless ($pass) {
        return 0;
      }
    }

    # Bool - long
    {
      my $pass = 0;
      if (1L) {
        $pass = 1;
      }
      if (0L) {
        $pass = 0;
      }
      unless ($pass) {
        return 0;
      }
    }

    # Bool - float
    {
      my $pass = 0;
      if (1.5f) {
        $pass = 1;
      }
      if (0.0f) {
        $pass = 0;
      }
      unless ($pass) {
        return 0;
      }
    }

    # Bool - double
    {
      my $pass = 0;
      if (1.5) {
        $pass = 1;
      }
      if (0.0) {
        $pass = 0;
      }
      unless ($pass) {
        return 0;
      }
    }
    
    return 1;
  }
  
  static method if_true : int () {
    
    if (1) {
      return 1;
    }
    
    return 0;
  }

  static method if_false : int () {
    
    if (0) {
      return 0;
    }
    
    return 1;
  }
  
  static method elsif_match : int () {
    
    my $num = 2;
    if ($num == 1) {
      return 0;
    }
    elsif ($num == 2) {
      return 1;
    }
    elsif ($num == 3) {
      return 0;
    }
    else {
      return 0;
    }
    return 0;
  }

  static method else_match : int () {
    
    my $num = 4;
    if ($num == 1) {
      return 0;
    }
    elsif ($num == 2) {
      return 0;
    }
    elsif ($num == 3) {
      return 0;
    }
    else {
      return 1;
    }
    return 0;
  }

  static method condition_my : int () {
    # Check my declaration in if condition part - if condition part is true
    {
      my $check1 = 0;
      my $check2 = 0;
      
      my $num = 1;
      if (my $num = 2) {
        if ($num == 2) {
          $check1 = 1;
        }
      }
      elsif (my $num = 3) {
        
      }
      else {
        
      }
      if ($num == 1) {
        $check2 = 1;
      }
      
      unless ($check1 && $check2) {
        return 0;
      }
    }

    # Check my declaration in if condition part - elsif condition part is true
    {
      my $check1 = 0;
      my $check2 = 0;
      
      my $num = 1;
      if (my $num = 0) {
      }
      elsif (my $num = 3) {
        if ($num == 3) {
          $check1 = 1;
        }
      }
      else {
        
      }
      if ($num == 1) {
        $check2 = 1;
      }
      
      unless ($check1 && $check2) {
        return 0;
      }
    }

    # Optional tests
    {
      my $num = 5;
      if (my $num = 3) {
        unless ($num == 3) {
          return 0;
        }
      }
    }
    
    return 1;
  }
}