package TestCase::Literal::FloatingPoint {

  # decimal
  sub decimal_all_numbers : int () {
    my $all_numbers : double = 0.12345678912345;
    unless ($all_numbers == 0.12345678912345) {
      return 0;
    }
    return 1;
  }
  sub decimal_minus : int () {
    my $minus = -0.25;
    unless ($minus == -0.25) {
      return 0;
    }
    return 1;
  }
  sub decimal_plus : int () {
    my $plus = +0.25;
    unless ($plus == +0.25) {
      return 0;
    }
    return 1;
  }
  sub decimal_prefix_f : int () {
    my $prefix_f : float = 0.25f;
    unless ($prefix_f == 0.25f) {
      return 0;
    }
    return 1;
  }
  sub decimal_prefix_F : int () {
    my $prefix_F : float = 0.25F;
    unless ($prefix_F == 0.25F) {
      return 0;
    }
    return 1;
  }
  sub decimal_prefix_d : int () {
    my $prefix_d : double = 0.12345678912345d;
    unless ($prefix_d == 0.12345678912345d) {
      return 0;
    }
    return 1;
  }
  sub decimal_prefix_D : int () {
    my $prefix_D : double = 0.12345678912345D;
    unless ($prefix_D == 0.12345678912345d) {
      return 0;
    }
    return 1;
  }
  sub decimal_under_line : int () {
    my $under_line = 0.12_34;
    unless ($under_line == 0.1234) {
      return 0;
    }
    return 1;
  }
  sub decimal_exponant_e_plus : int () {
    my $exponant_e_plus = 0.12e+7;
    unless ($exponant_e_plus == 0.12e+7) {
      return 0;
    }
    return 1;
  }
  sub decimal_exponant_E_minus : int () {
    my $exponant_E_minus = 0.12E-7;
    unless ($exponant_E_minus == 0.12E-7) {
      return 0;
    }
    return 1;
  }
  sub decimal_exponant_e_nosign : int () {
    my $exponant_e_nosign = 0.12e7;
    unless ($exponant_e_nosign == 0.12e7) {
      return 0;
    }
    return 1;
  }
  sub decimal_exponant_no_point : int () {
    my $exponant_no_point = 12e7;
    unless ($exponant_no_point == 12e7) {
      return 0;
    }
    return 1;
  }

  # hex
  sub hex_all_numbers : int () {
    my $all_numbers1 = 0x0.123456789p0;
    my $all_numbers2 = 0x0.abcdep0;
    my $all_numbers3 = 0x0.ABCDEFp0;
    
    unless ($all_numbers1 == 0x0.123456789p0) {
      return 0;
    }
    
    unless ($all_numbers2 == 0x0.abcdep0) {
      return 0;
    }
    unless ($all_numbers3 == 0x0.ABCDEFp0) {
      return 0;
    }
    
    return 1;
  }
  sub hex_suffix : int () {
    my $hex_suffix_f : float = 0x0.FFp0f;
    unless ($hex_suffix_f == 0x0.FFp0f) {
      return 0;
    }

    my $hex_suffix_F : float = 0x0.FFp0F;
    unless ($hex_suffix_F == 0x0.FFp0F) {
      return 0;
    }
    
    return 1;
  }
  sub hex_equals_decimal : int () {
    my $hex_equals_decimal = 0x0.Fp0;
    unless ($hex_equals_decimal == 0.9375) {
      return 0;
    }
    
    return 1;
  }
  sub hex_exponent : int () {
    my $hex_exponent_p = 0x0.Fp-4;
    unless ($hex_exponent_p == 0.05859375) {
      return 0;
    }
    my $hex_exponent_P = 0x0.FP-4;
    unless ($hex_exponent_P == 0.05859375) {
      return 0;
    }

    my $hex_exponent_nosign = 0x0.Fp4;
    unless ($hex_exponent_nosign == 0xFp0) {
      return 0;
    }

    return 1;
  }
  sub hex_underline : int () {
    my $hex_underline = 0x0.F_Fp0;
    unless ($hex_underline == 0x0.FFp0) {
      return 0;
    }

    return 1;
  }

}