package TestCase::UnaryMinus {
  use SPVM::Util (INT8_MIN, INT8_MAX, INT16_MIN, INT16_MAX, INT32_MIN, INT32_MAX, INT64_MIN, INT64_MAX, FLT_MIN, FLT_MAX, DBL_MIN, DBL_MAX);

  sub unary_minus_byte : int () {
    my $value = -(byte)INT8_MAX();
    
    unless ($value isa int) {
      return 0;
    }
    
    unless ($value == -INT8_MAX()) {
      return 0;
    }
    
    return 1;
  }

  sub unary_minus_short : int () {
    my $value = -(short)INT16_MAX();
    
    unless ($value isa int) {
      return 0;
    }
    
    unless ($value == -INT16_MAX()) {
      return 0;
    }
    
    return 1;
  }
  
  sub unary_minus_int : int () {
    my $value = -INT32_MAX();
    
    unless ($value isa int) {
      return 0;
    }
    
    unless ($value == -INT32_MAX()) {
      return 0;
    }
    
    return 1;
  }

  sub unary_minus_long : int () {
    my $value = -INT64_MAX();
    
    unless ($value isa long) {
      return 0;
    }
    
    unless ($value == -INT64_MAX()) {
      return 0;
    }
    
    return 1;
  }

  sub unary_minus_float : int () {
    my $value = -FLT_MAX();
    
    unless ($value isa float) {
      return 0;
    }
    
    unless ($value == -FLT_MAX()) {
      return 0;
    }
    
    return 1;
  }
  sub unary_minus_double : int () {
    my $value = -DBL_MAX();
    
    unless ($value isa double) {
      return 0;
    }
    
    unless ($value == -DBL_MAX()) {
      return 0;
    }
    
    return 1;
  }

}