class TestCase::SpecialAssign {
  use TestCase::Minimal;
  use TestCase::Simple;
  use TestCase::Point_3b;
  use TestCase::Point_3s;
  use TestCase::Point_3i;
  use TestCase::Point_3l;
  use TestCase::Point_3f;
  use TestCase::Point_3d;
  use Fn;
  
  our $BYTE_VALUE : byte;
  our $SHORT_VALUE : short;
  our $INT_VALUE : int;
  our $LONG_VALUE : long;
  our $FLOAT_VALUE : float;
  our $DOUBLE_VALUE : double;

  static method special_assign_right_shift_unsigned_var : int () {
    my $value_byte = (byte)Fn->INT8_MIN();
    my $value_short = (short)Fn->INT16_MIN();
    my $value_int = Fn->INT32_MIN();
    my $value_long = Fn->INT64_MIN();
    
    my $value_byte2 : byte = $value_byte >>>= 1;
    my $value_short2 : short = $value_short >>>= 1;
    my $value_int2 : int = $value_int >>>= 1;
    my $value_long2 : long = $value_long >>>= 1;
    
    if ($value_byte == Fn->INT8_MIN() >>> 1) {
      if ($value_byte2 == Fn->INT8_MIN() >>> 1) {
        if ($value_short == Fn->INT16_MIN() >>> 1) {
          if ($value_short2 == Fn->INT16_MIN() >>> 1) {
            if ($value_int == Fn->INT32_MIN() >>> 1) {
              if ($value_int2 == Fn->INT32_MIN() >>> 1) {
                if ($value_long == Fn->INT64_MIN() >>> 1) {
                  if ($value_long2 == Fn->INT64_MIN() >>> 1) {
                    return 1;
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  static method special_assign_right_shift_var : int () {
    my $value_byte = (byte)Fn->INT8_MIN();
    my $value_short = (short)Fn->INT16_MIN();
    my $value_int = Fn->INT32_MIN();
    my $value_long = Fn->INT64_MIN();
    
    my $value_byte2 : byte = $value_byte >>= 1;
    my $value_short2 : short = $value_short >>= 1;
    my $value_int2 : int = $value_int >>= 1;
    my $value_long2 : long = $value_long >>= 1;
    
    if ($value_byte == Fn->INT8_MIN() >> 1) {
      if ($value_byte2 == Fn->INT8_MIN() >> 1) {
        if ($value_short == Fn->INT16_MIN() >> 1) {
          if ($value_short2 == Fn->INT16_MIN() >> 1) {
            if ($value_int == Fn->INT32_MIN() >> 1) {
              if ($value_int2 == Fn->INT32_MIN() >> 1) {
                if ($value_long == Fn->INT64_MIN() >> 1) {
                  if ($value_long2 == Fn->INT64_MIN() >> 1) {
                    return 1;
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  static method special_assign_left_shift_var : int () {
    my $value_byte = (byte)6;
    my $value_short = (short)6;
    my $value_int = 6;
    my $value_long = 6;
    
    my $value_byte2 : byte = $value_byte <<= 1;
    my $value_short2 : short = $value_short <<= 1;
    my $value_int2 : int = $value_int <<= 1;
    my $value_long2 : long = $value_long <<= 1;
    
    if ($value_byte == 6 << 1) {
      if ($value_byte2 == 6 << 1) {
        if ($value_short == 6 << 1) {
          if ($value_short2 == 6 << 1) {
            if ($value_int == 6 << 1) {
              if ($value_int2 == 6 << 1) {
                if ($value_long == 6 << 1) {
                  if ($value_long2 == 6 << 1) {
                    return 1;
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  static method special_assign_bit_xor_var : int () {
    my $value_byte = (byte)6;
    my $value_short = (short)6;
    my $value_int = 6;
    my $value_long = 6;
    
    my $value_byte2 : byte = $value_byte ^= 3;
    my $value_short2 : short = $value_short ^= 3;
    my $value_int2 : int = $value_int ^= 3;
    my $value_long2 : long = $value_long ^= 3;
    
    if ($value_byte == (6 ^ 3)) {
      if ($value_byte2 == (6 ^ 3)) {
        if ($value_short == (6 ^ 3)) {
          if ($value_short2 == (6 ^ 3)) {
            if ($value_int == (6 ^ 3)) {
              if ($value_int2 == (6 ^ 3)) {
                if ($value_long == (6 ^ 3)) {
                  if ($value_long2 == (6 ^ 3)) {
                    return 1;
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  static method special_assign_bit_or_var : int () {
    my $value_byte = (byte)6;
    my $value_short = (short)6;
    my $value_int = 6;
    my $value_long = 6;
    
    my $value_byte2 : byte = $value_byte |= 3;
    my $value_short2 : short = $value_short |= 3;
    my $value_int2 : int = $value_int |= 3;
    my $value_long2 : long = $value_long |= 3;
    
    if ($value_byte == (6 | 3)) {
      if ($value_byte2 == (6 | 3)) {
        if ($value_short == (6 | 3)) {
          if ($value_short2 == (6 | 3)) {
            if ($value_int == (6 | 3)) {
              if ($value_int2 == (6 | 3)) {
                if ($value_long == (6 | 3)) {
                  if ($value_long2 == (6 | 3)) {
                    return 1;
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  static method special_assign_bit_and_var : int () {
    my $value_byte = (byte)6;
    my $value_short = (short)6;
    my $value_int = 6;
    my $value_long = 6;
    
    my $value_byte2 : byte = $value_byte &= 3;
    my $value_short2 : short = $value_short &= 3;
    my $value_int2 : int = $value_int &= 3;
    my $value_long2 : long = $value_long &= 3;
    
    if ($value_byte == (6 & 3)) {
      if ($value_byte2 == (6 & 3)) {
        if ($value_short == (6 & 3)) {
          if ($value_short2 == (6 & 3)) {
            if ($value_int == (6 & 3)) {
              if ($value_int2 == (6 & 3)) {
                if ($value_long == (6 & 3)) {
                    return 1;
                }
              }
            }
          }
        }
      }
    }
  }

  static method special_assign_remainder_var : int () {
    my $value_byte = (byte)6;
    my $value_short = (short)6;
    my $value_int = 6;
    my $value_long = 6L;
    my $value_float = 0.25f;
    my $value_double = 0.25;
    
    my $value_byte2 : byte = $value_byte %= 3;
    my $value_short2 : short = $value_short %= 3;
    my $value_int2 : int = $value_int %= 3;
    my $value_long2 : long = $value_long %= 3;
    
    if ($value_byte == 6 % 3) {
      if ($value_byte2 == 6 % 3) {
        if ($value_short == 6 % 3) {
          if ($value_short2 == 6 % 3) {
            if ($value_int == 6 % 3) {
              if ($value_int2 == 6 % 3) {
                if ($value_long == 6 % 3) {
                  if ($value_long2 == 6 % 3) {
                    return 1;
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  static method special_assign_divide_var : int () {
    my $value_byte = (byte)6;
    my $value_short = (short)6;
    my $value_int = 6;
    my $value_long = 6L;
    my $value_float = 0.25f;
    my $value_double = 0.25;
    
    my $value_byte2 : byte = $value_byte /= 3;
    my $value_short2 : short = $value_short /= 3;
    my $value_int2 : int = $value_int /= 3;
    my $value_long2 : long = $value_long /= 3;
    my $value_float2 : float = $value_float /= 3;
    my $value_double2 : double= $value_double /= 3;
    
    if ($value_byte == 6 / 3) {
      if ($value_byte2 == 6 / 3) {
        if ($value_short == 6 / 3) {
          if ($value_short2 == 6 / 3) {
            if ($value_int == 6 / 3) {
              if ($value_int2 == 6 / 3) {
                if ($value_long == 6 / 3) {
                  if ($value_long2 == 6 / 3) {
                    if ($value_float == 0.25f / 3) {
                      if ($value_float2 == 0.25f / 3) {
                        if ($value_double == 0.25 / 3) {
                          if ($value_double2 = 0.25 / 3) {
                            return 1;
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  static method special_assign_multiply_var : int () {
    my $value_byte = (byte)6;
    my $value_short = (short)6;
    my $value_int = 6;
    my $value_long = 6L;
    my $value_float = 0.25f;
    my $value_double = 0.25;
    
    my $value_byte2 : byte = $value_byte *= 3;
    my $value_short2 : short = $value_short *= 3;
    my $value_int2 : int = $value_int *= 3;
    my $value_long2 : long = $value_long *= 3;
    my $value_float2 : float = $value_float *= 3;
    my $value_double2 : double= $value_double *= 3;
    
    if ($value_byte == 6 * 3) {
      if ($value_byte2 == 6 * 3) {
        if ($value_short == 6 * 3) {
          if ($value_short2 == 6 * 3) {
            if ($value_int == 6 * 3) {
              if ($value_int2 == 6 * 3) {
                if ($value_long == 6 * 3) {
                  if ($value_long2 == 6 * 3) {
                    if ($value_float == 0.25f * 3) {
                      if ($value_float2 == 0.25f * 3) {
                        if ($value_double == 0.25 * 3) {
                          if ($value_double2 = 0.25 * 3) {
                            return 1;
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  static method special_assign_subtract_var : int () {
    my $value_byte = (byte)Fn->INT8_MAX();
    my $value_short = (short)Fn->INT16_MAX();
    my $value_int = Fn->INT32_MAX();
    my $value_long = Fn->INT64_MAX();
    my $value_float = Fn->FLT_MAX();
    my $value_double = Fn->DBL_MAX();
    
    my $value_byte2 : byte = $value_byte -=1;
    my $value_short2 : short = $value_short -=1;
    my $value_int2 : int = $value_int -=1;
    my $value_long2 : long = $value_long -=1;
    my $value_float2 : float = $value_float -=1;
    my $value_double2 : double= $value_double -=1;
    
    if ($value_byte == Fn->INT8_MAX() - 1) {
      if ($value_byte2 == Fn->INT8_MAX() - 1) {
        if ($value_short == Fn->INT16_MAX() - 1) {
          if ($value_short2 == Fn->INT16_MAX() - 1) {
            if ($value_int == Fn->INT32_MAX() - 1) {
              if ($value_int2 == Fn->INT32_MAX() - 1) {
                if ($value_long == Fn->INT64_MAX() - 1) {
                  if ($value_long2 == Fn->INT64_MAX() - 1) {
                    if ($value_float == Fn->FLT_MAX() - 1) {
                      if ($value_float2 == Fn->FLT_MAX() - 1) {
                        if ($value_double == Fn->DBL_MAX() - 1) {
                          if ($value_double2 = Fn->DBL_MAX() - 1) {
                            return 1;
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  static method special_assign_add_field_access_invocant_not_var : int () {
    my $nums_of_nums = new TestCase::Minimal[2];
    $nums_of_nums->[0] = TestCase::Minimal->new;
    
    my $ret1 = $nums_of_nums->[0]{x} += 1;
    
    if ($nums_of_nums->[0]{x} == 1) {
      if ($ret1 == 1) {
        return 1;
      }
    }
    
    return 0;
  }
  
  static method special_assign_add_array_access_invocant_not_var : int () {
    my $nums_of_nums = new int[][2];
    $nums_of_nums->[0] = new int[1];
    
    my $ret1 = $nums_of_nums->[0][0] += 1;
    
    if ($nums_of_nums->[0][0] == 1) {
      if ($ret1 == 1) {
        return 1;
      }
    }
    
    return 0;
  }

  static method special_assign_add_array_field_access_invocant_not_var : int () {
    my $nums_of_nums = new TestCase::Point_3i[][2];
    $nums_of_nums->[0] = new TestCase::Point_3i[1];
    
    my $ret1 = $nums_of_nums->[0][0]{x} += 1;
    
    if ($nums_of_nums->[0][0]{x} == 1) {
      if ($ret1 == 1) {
        return 1;
      }
    }
    
    return 0;
  }

  static method special_assign_add_array_field_access_constant_index : int () {
    my $values_point_byte = new TestCase::Point_3b[1];
    my $values_point_short = new TestCase::Point_3s[1];
    my $values_point_int = new TestCase::Point_3i[1];
    my $values_point_long = new TestCase::Point_3l[1];
    my $values_point_float = new TestCase::Point_3f[1];
    my $values_point_double = new TestCase::Point_3d[1];
    
    $values_point_byte->[0]{x} = (byte)Fn->INT8_MIN();
    $values_point_short->[0]{x} = (short)Fn->INT16_MIN();
    $values_point_int->[0]{x} = Fn->INT32_MIN();
    $values_point_long->[0]{x} = Fn->INT64_MIN();
    $values_point_float->[0]{x} = Fn->FLT_MIN();
    $values_point_double->[0]{x} = Fn->DBL_MIN();

    my $value_byte2 = $values_point_byte->[0]{x} += 1;
    my $value_short2 = $values_point_short->[0]{x} += 1;
    my $value_int2 = $values_point_int->[0]{x} += 1;
    my $value_long2 = $values_point_long->[0]{x} += 1;
    my $value_float2 = $values_point_float->[0]{x} += 1;
    my $value_double2 = $values_point_double->[0]{x} += 1;
    
    if ($values_point_byte->[0]{x} == Fn->INT8_MIN() + 1) {
      if ($value_byte2 == Fn->INT8_MIN() + 1) {
        if ($values_point_short->[0]{x} == Fn->INT16_MIN() + 1) {
          if ($value_short2 == Fn->INT16_MIN() + 1) {
            if ($values_point_int->[0]{x} == Fn->INT32_MIN() + 1) {
              if ($value_int2 == Fn->INT32_MIN() + 1) {
                if ($values_point_long->[0]{x} == Fn->INT64_MIN() + 1) {
                  if ($value_long2 == Fn->INT64_MIN() + 1) {
                    if ($values_point_float->[0]{x} == Fn->FLT_MIN() + 1) {
                      if ($value_float2 == Fn->FLT_MIN() + 1) {
                        if ($values_point_double->[0]{x} == Fn->DBL_MIN() + 1) {
                          if ($value_double2 = Fn->DBL_MIN() + 1) {
                            return 1;
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  static method special_assign_add_class_var_access : int () {
    $BYTE_VALUE = (byte)Fn->INT8_MIN();
    $SHORT_VALUE = (short)Fn->INT16_MIN();
    $INT_VALUE = Fn->INT32_MIN();
    $LONG_VALUE = Fn->INT64_MIN();
    $FLOAT_VALUE = Fn->FLT_MIN();
    $DOUBLE_VALUE = Fn->DBL_MIN();
    
    my $value_byte2 = $BYTE_VALUE += 1;
    my $value_short2 = $SHORT_VALUE += 1;
    my $value_int2 = $INT_VALUE += 1;
    my $value_long2 = $LONG_VALUE += 1;
    my $value_float2 = $FLOAT_VALUE += 1;
    my $value_double2 = $DOUBLE_VALUE += 1;
    
    if ($BYTE_VALUE == Fn->INT8_MIN() + 1) {
      if ($value_byte2 == Fn->INT8_MIN() + 1) {
        if ($SHORT_VALUE == Fn->INT16_MIN() + 1) {
          if ($value_short2 == Fn->INT16_MIN() + 1) {
            if ($INT_VALUE == Fn->INT32_MIN() + 1) {
              if ($value_int2 == Fn->INT32_MIN() + 1) {
                if ($LONG_VALUE == Fn->INT64_MIN() + 1) {
                  if ($value_long2 == Fn->INT64_MIN() + 1) {
                    if ($FLOAT_VALUE == Fn->FLT_MIN() + 1) {
                      if ($value_float2 == Fn->FLT_MIN() + 1) {
                        if ($DOUBLE_VALUE == Fn->DBL_MIN() + 1) {
                          if ($value_double2 = Fn->DBL_MIN() + 1) {
                            return 1;
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  static method special_assign_add_deref : int () {
    my $value_byte = (byte)Fn->INT8_MIN();
    my $value_short = (short)Fn->INT16_MIN();
    my $value_int = Fn->INT32_MIN();
    my $value_long = Fn->INT64_MIN();
    my $value_float = Fn->FLT_MIN();
    my $value_double = Fn->DBL_MIN();
    
    my $value_byte_ref = \$value_byte;
    my $value_short_ref = \$value_short;
    my $value_int_ref = \$value_int;
    my $value_long_ref = \$value_long;
    my $value_float_ref = \$value_float;
    my $value_double_ref = \$value_double;
    
    my $value_byte2 = $$value_byte_ref += 1;
    my $value_short2 = $$value_short_ref += 1;
    my $value_int2 = $$value_int_ref += 1;
    my $value_long2 = $$value_long_ref += 1;
    my $value_float2 = $$value_float_ref += 1;
    my $value_double2 = $$value_double_ref += 1;
    
    if ($$value_byte_ref == Fn->INT8_MIN() + 1) {
      if ($value_byte2 == Fn->INT8_MIN() + 1) {
        if ($$value_short_ref == Fn->INT16_MIN() + 1) {
          if ($value_short2 == Fn->INT16_MIN() + 1) {
            if ($$value_int_ref == Fn->INT32_MIN() + 1) {
              if ($value_int2 == Fn->INT32_MIN() + 1) {
                if ($$value_long_ref == Fn->INT64_MIN() + 1) {
                  if ($value_long2 == Fn->INT64_MIN() + 1) {
                    if ($$value_float_ref == Fn->FLT_MIN() + 1) {
                      if ($value_float2 == Fn->FLT_MIN() + 1) {
                        if ($$value_double_ref == Fn->DBL_MIN() + 1) {
                          if ($value_double2 = Fn->DBL_MIN() + 1) {
                            return 1;
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  static method special_assign_add_field_access : int () {
    my $simple = TestCase::Simple->new;
    
    $simple->{byte_value} = (byte)Fn->INT8_MIN();
    $simple->{short_value} = (short)Fn->INT16_MIN();
    $simple->{int_value} = Fn->INT32_MIN();
    $simple->{long_value} = Fn->INT64_MIN();
    $simple->{float_value} = Fn->FLT_MIN();
    $simple->{double_value} = Fn->DBL_MIN();

    my $value_byte2 = $simple->{byte_value} += 1;
    my $value_short2 = $simple->{short_value} += 1;
    my $value_int2 = $simple->{int_value} += 1;
    my $value_long2 = $simple->{long_value} += 1;
    my $value_float2 = $simple->{float_value} += 1;
    my $value_double2 = $simple->{double_value} += 1;
    
    if ($simple->{byte_value} == Fn->INT8_MIN() + 1) {
      if ($value_byte2 == Fn->INT8_MIN() + 1) {
        if ($simple->{short_value} == Fn->INT16_MIN() + 1) {
          if ($value_short2 == Fn->INT16_MIN() + 1) {
            if ($simple->{int_value} == Fn->INT32_MIN() + 1) {
              if ($value_int2 == Fn->INT32_MIN() + 1) {
                if ($simple->{long_value} == Fn->INT64_MIN() + 1) {
                  if ($value_long2 == Fn->INT64_MIN() + 1) {
                    if ($simple->{float_value} == Fn->FLT_MIN() + 1) {
                      if ($value_float2 == Fn->FLT_MIN() + 1) {
                        if ($simple->{double_value} == Fn->DBL_MIN() + 1) {
                          if ($value_double2 = Fn->DBL_MIN() + 1) {
                            return 1;
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  static method special_assign_add_array_access_var_index : int () {
    my $values_byte = new byte[1];
    my $values_short = new short[1];
    my $values_int = new int[1];
    my $values_long = new long[1];
    my $values_float = new float[1];
    my $values_double = new double[1];
    
    $values_byte->[0] = (byte)Fn->INT8_MIN();
    $values_short->[0] = (short)Fn->INT16_MIN();
    $values_int->[0] = Fn->INT32_MIN();
    $values_long->[0] = Fn->INT64_MIN();
    $values_float->[0] = Fn->FLT_MIN();
    $values_double->[0] = Fn->DBL_MIN();

    my $index = 0;
    my $value_byte2 = $values_byte->[$index] += 1;
    my $value_short2 = $values_short->[$index] += 1;
    my $value_int2 = $values_int->[$index] += 1;
    my $value_long2 = $values_long->[$index] += 1;
    my $value_float2 = $values_float->[$index] += 1;
    my $value_double2 = $values_double->[$index] += 1;
    
    if ($values_byte->[0] == Fn->INT8_MIN() + 1) {
      if ($value_byte2 == Fn->INT8_MIN() + 1) {
        if ($values_short->[0] == Fn->INT16_MIN() + 1) {
          if ($value_short2 == Fn->INT16_MIN() + 1) {
            if ($values_int->[0] == Fn->INT32_MIN() + 1) {
              if ($value_int2 == Fn->INT32_MIN() + 1) {
                if ($values_long->[0] == Fn->INT64_MIN() + 1) {
                  if ($value_long2 == Fn->INT64_MIN() + 1) {
                    if ($values_float->[0] == Fn->FLT_MIN() + 1) {
                      if ($value_float2 == Fn->FLT_MIN() + 1) {
                        if ($values_double->[0] == Fn->DBL_MIN() + 1) {
                          if ($value_double2 = Fn->DBL_MIN() + 1) {
                            return 1;
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  static method special_assign_add_array_access_constant_index : int () {
    my $values_byte = new byte[1];
    my $values_short = new short[1];
    my $values_int = new int[1];
    my $values_long = new long[1];
    my $values_float = new float[1];
    my $values_double = new double[1];
    
    $values_byte->[0] = (byte)Fn->INT8_MIN();
    $values_short->[0] = (short)Fn->INT16_MIN();
    $values_int->[0] = Fn->INT32_MIN();
    $values_long->[0] = Fn->INT64_MIN();
    $values_float->[0] = Fn->FLT_MIN();
    $values_double->[0] = Fn->DBL_MIN();

    my $value_byte2 = $values_byte->[0] += 1;
    my $value_short2 = $values_short->[0] += 1;
    my $value_int2 = $values_int->[0] += 1;
    my $value_long2 = $values_long->[0] += 1;
    my $value_float2 = $values_float->[0] += 1;
    my $value_double2 = $values_double->[0] += 1;
    
    if ($values_byte->[0] == Fn->INT8_MIN() + 1) {
      if ($value_byte2 == Fn->INT8_MIN() + 1) {
        if ($values_short->[0] == Fn->INT16_MIN() + 1) {
          if ($value_short2 == Fn->INT16_MIN() + 1) {
            if ($values_int->[0] == Fn->INT32_MIN() + 1) {
              if ($value_int2 == Fn->INT32_MIN() + 1) {
                if ($values_long->[0] == Fn->INT64_MIN() + 1) {
                  if ($value_long2 == Fn->INT64_MIN() + 1) {
                    if ($values_float->[0] == Fn->FLT_MIN() + 1) {
                      if ($value_float2 == Fn->FLT_MIN() + 1) {
                        if ($values_double->[0] == Fn->DBL_MIN() + 1) {
                          if ($value_double2 = Fn->DBL_MIN() + 1) {
                            return 1;
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  static method special_assign_add_var : int () {
    my $value_byte = (byte)Fn->INT8_MIN();
    my $value_short = (short)Fn->INT16_MIN();
    my $value_int = Fn->INT32_MIN();
    my $value_long = Fn->INT64_MIN();
    my $value_float = Fn->FLT_MIN();
    my $value_double = Fn->DBL_MIN();
    
    my $value_byte2 : byte = $value_byte += 1;
    my $value_short2 : short = $value_short += 1;
    my $value_int2 : int = $value_int += 1;
    my $value_long2 : long = $value_long += 1;
    my $value_float2 : float = $value_float += 1;
    my $value_double2 : double= $value_double += 1;
    
    if ($value_byte == Fn->INT8_MIN() + 1) {
      if ($value_byte2 == Fn->INT8_MIN() + 1) {
        if ($value_short == Fn->INT16_MIN() + 1) {
          if ($value_short2 == Fn->INT16_MIN() + 1) {
            if ($value_int == Fn->INT32_MIN() + 1) {
              if ($value_int2 == Fn->INT32_MIN() + 1) {
                if ($value_long == Fn->INT64_MIN() + 1) {
                  if ($value_long2 == Fn->INT64_MIN() + 1) {
                    if ($value_float == Fn->FLT_MIN() + 1) {
                      if ($value_float2 == Fn->FLT_MIN() + 1) {
                        if ($value_double == Fn->DBL_MIN() + 1) {
                          if ($value_double2 = Fn->DBL_MIN() + 1) {
                            return 1;
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  
  # Concat
  static method special_assign_concat : string () {
    
    {
      my $value = "a";
      
      $value .= "b";
      
      unless ($value isa string) {
        return 0;
      }
      unless ($value eq "ab") {
        return 0;
      }
    }

    {
      my $value = "a";
      
      $value .= (byte[])"b";
      
      unless ($value isa string) {
        return 0;
      }
      unless ($value eq "ab") {
        return 0;
      }
    }

    return 1;
  }
  
  static method special_assign : int () {
    my $num1 = 1;
    $num1 += 4;
    if ($num1 == 5) {
      my $num2 = 5;
      $num2 -= 2;
      if ($num2 == 3) {
        my $num3 = 3;
        $num3 *= 4;
        if ($num3 == 12) {
          my $num4 = 6;
          $num4 /= 2;
          if ($num4 == 3) {
            my $num5 = 10;
            $num5 %= 4;
            if ($num5 == 2) {
              my $num6 = 8;
              $num6 <<= 1;
              if ($num6 == 16) {
                my $num7 = -8;
                $num7 >>= 1;
                if ($num7 == -4) {
                  my $num8 = 0xFFFFFFFF;
                  $num8 >>>= 1;
                  if ($num8 == 0x7FFFFFFF) {
                    my $num9 = 0xFFFFFF00;
                    $num9 &= 0xFF;
                    if ($num9 == 0) {
                      my $num10 = 0xFFFFFF00;
                      $num10 |= 0xFF;
                      if ($num10 == 0xFFFFFFFF) {
                        my $num11 = 0xFFFFFF00;
                        $num11 ^= 0xFFFF;
                        if ($num11 == 0xFFFF00FF) {
                          return 1;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    
    return 0;
  }
}