# Copyright (C) 2007, 2008 Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

#  This file was written by Wu Zhou. (woodzltc@cn.ibm.com)

# This file is part of the gdb testsuite.  It is intended to test that
# gdb could correctly handle decimal floating point introduced in IEEE 754R.

if $tracelevel then {
  strace $tracelevel
}

set testfile "dfp-test"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}

# Try to compile the test case.  If we can't, assume the
# toolchain does not yet provide DFP support and bail out.
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {quiet debug}] != "" } {
    verbose "Skipping DFP tests."
    return -1
}

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

if ![runto_main] then {
    perror "couldn't run to breakpoint"
    continue
}

# Detect the size of the target's basic types (from gdb.base/long_long.exp).

proc get_valueof { fmt exp default } {
    global gdb_prompt
    send_gdb "print${fmt} ${exp}\n"
    gdb_expect {
	-re "\\$\[0-9\]* = (\[-\]*\[0-9\]*).*$gdb_prompt $" {
	    set val $expect_out(1,string)
	}
	timeout {
	    set val ${default}
	}
    }
    return ${val}
}

proc get_sizeof { type default } {
    return [get_valueof "/d" "sizeof (${type})" $default]
}

set sizeof_long [get_sizeof "long" 4]

proc d32_set_tests {} {

    gdb_test "p d32=123.45df" " = 123.45"
    gdb_test "p d32=12345.df" " = 12345"
    gdb_test "p d32=12345.67df" " = 12345.67"
    gdb_test "p d32=1234567.df" " = 1234567"

    gdb_test "p d32=1.234567E0df" " = 1.234567"
    gdb_test "p d32=1.234567E10df" " = 1.234567E\\+10"
    gdb_test "p d32=1.234567E+96df" " = 1.234567E\\+96"

    # Test that gdb could handle the max, normalized min and subnormalized min.
    gdb_test "p d32=9.999999E96df" " = 9.999999E\\+96"
    gdb_test "p d32=1.0E-95df" " = 1.0E\\-95"
    gdb_test "p d32=1.E-101df" " = 1E\\-101"
    gdb_test "p d32=0.000001E-95df" " = 1E\\-101"

    # Test that gdb could detect coefficient/exponent out of range.
    # The coefficient out of range will be rounded to its nearest value.
    # And the exponent out of range will be handled as infinity.
    gdb_test "p d32=1.2345678df" " = 1.234568" "1.2345678 is rounded to 1.234568"
    gdb_test "p d32=1.0E-101df" " = 1E-101" "1.0E-101 is rounded to 1E-101"
    gdb_test "p d32=1.234567E+97df" " = Infinity" "1.234567E+97 is Infinity"

    # Test that gdb could detect the errors in the string representation of _Decimal32
    gdb_test "p d32=12345.df" " = 12345" "12345. is a valid number"
    gdb_test "p d32=12345df" ".*Invalid number.*" "12345 is an invalid number"
    gdb_test "p d32=1.23Edf" ".*Conversion syntax.*" "1.23E is an invalid number"
    gdb_test "p d32=1.23E45Adf" ".*Conversion syntax.*" "1.23E45A is an invalid number"
}

proc d64_set_tests {} {

    gdb_test "p d64=123.45dd" " = 123.45"
    gdb_test "p d64=12345.dd" " = 12345"
    gdb_test "p d64=12345.67dd" " = 12345.67"
    gdb_test "p d64=1.234567890123456dd" " = 1.234567890123456"

    gdb_test "p d64=1.234567890123456E10dd" " = 12345678901.23456"
    gdb_test "p d64=1.234567890123456E100dd" " = 1.234567890123456E\\+100"
    gdb_test "p d64=1.234567890123456E384dd" " = 1.234567890123456E\\+384"

    # Test that gdb could handle the max, normalized min and subnormalized min.
    gdb_test "p d64=9.999999999999999E384dd" " = 9.999999999999999E\\+384"
    gdb_test "p d64=1.E-383dd" " = 1E\\-383"
    gdb_test "p d64=1.E-398dd" " = 1E\\-398"
    gdb_test "p d64=0.000000000000001E-383dd" " = 1E\\-398"

    # Test that gdb could detect coefficient/exponent out of range.
    # The coefficient out of range will be rounded to its nearest value.
    # And the exponent out of range will be handled as infinity.
    gdb_test "p d64=1.2345678901234567dd" " = 1.234567890123457" "1.2345678901234567 is rounded to 1.234567890123457"
    gdb_test "p d64=9.9999999999999999E384dd" " = Infinity" "d64=9.9999999999999999E384 is Infinity"
    gdb_test "p d64=1.234567890123456E385dd" " = Infinity" "d64=1.234567890123456E385 is Infinity"

    # Test that gdb could detect the errors in the string representation of _Decimal64
    gdb_test "p d64=12345dd" ".*Invalid number.*" "12345dd is an invalid number"
    gdb_test "p d64=1.23Edd" ".*Conversion syntax.*" "1.23E is an invalid number"
    gdb_test "p d64=1.23E45Add" ".*Conversion syntax.*" "1.23E45A is an invalid number"
}

proc d128_set_tests {} {

    gdb_test "p d128=123.45dl" " = 123.45"
    gdb_test "p d128=12345.dl" " = 12345"
    gdb_test "p d128=12345.67dl" " = 12345.67"
    gdb_test "p d128=1.234567890123456789012345678901234dl" " = 1.234567890123456789012345678901234"

    gdb_test "p d128=1.234567890123456E10dl" " = 12345678901.23456"
    gdb_test "p d128=1.234567890123456E100dl" " = 1.234567890123456E\\+100"
    gdb_test "p d128=1.234567890123456E1000dl" " = 1.234567890123456E\\+1000"

    # Test that gdb could handle the max, normalized min and subnormalized min.
    gdb_test "p d128=9.999999999999999999999999999999999E6144dl" " = 9.999999999999999999999999999999999E\\+6144"
    gdb_test "p d128=1.E-6143dl" " = 1E\\-6143"
    gdb_test "p d128=1.E-6176dl" " = 1E\\-6176"
    gdb_test "p d128=0.000000000000000000000000000000001E-6143dl" " = 1E\\-6176"

    # Test that gdb could detect coefficient/exponent out of range.
    # The coefficient out of range will be rounded to its nearest value.
    # And the exponent out of range will be handled as infinity.
    gdb_test "p d128=1.2345678901234567890123456789012345dl" "1.234567890123456789012345678901234" "1.2345678901234567890123456789012345 is rounded to 1.234567890123456789012345678901234"
    gdb_test "p d128=1.234567890123456E6145dl" "Infinity" "d128=1.234567890123456E6145 is Infinity"

    # Test that gdb could detect the errors in the string representation of _Decimal128
    gdb_test "p d128=12345dl" ".*Invalid number.*" "12345dl is an invalid number"
    gdb_test "p d128=1.23Edl" ".*Conversion syntax.*" "1.23E is an invalid number"
    gdb_test "p d128=1.23E45Adl" ".*Conversion syntax.*" "1.23E45A is an invalid number"
}

# Different tests on 32-bits decimal floating point, including the printing
# of finite numbers, infinite and NaN, and also the setting of different
# decimal value.

if [gdb_test "next" \
    ".*Positive infd32.*" \
    "next after initializing d32"] then { gdb_suppress_tests }
gdb_test "print d32" "1.2345" "d32 is initialized to 1.2345"

if [gdb_test "next" \
    ".*Negative infd32.*" \
    "next after assigning builtin infinity to d32"] then { gdb_suppress_tests }
gdb_test "print d32" "Infinity" "d32 is positive Infinity"

if [gdb_test "next" \
    ".*__builtin_nand32.*" \
    "next after assigning negative builtin infinity to d32"] then { gdb_suppress_tests }
gdb_test "print d32" "-Infinity" "d32 is negative Infinity"

if [gdb_test "next" \
    ".*d64 = 1.2345.*" \
    "next after assigning builtin NaN to d32"] then { gdb_suppress_tests }
gdb_test "print d32" "NaN" "d32 is NaN"

d32_set_tests


# Different tests on 64-bits decimal floating point, including the display
# of finite number, infinite and NaN, and also the setting of different
# decimal value.

if [gdb_test "next" \
    ".*Positive infd64.*" \
    "next after initializing d64"] then { gdb_suppress_tests }
gdb_test "print d64" "1.2345" "d64 is initialized to 1.2345"

if [gdb_test "next" \
    ".*Negative infd64.*" \
    "next after assigning builtin infinity to d64"] then { gdb_suppress_tests }
gdb_test "print d64" "Infinity" "d64 is positive Infinity"

if [gdb_test "next" \
    ".*__builtin_nand64.*" \
    "next after assigning negative builtin infinity to d64"] then { gdb_suppress_tests }
gdb_test "print d64" "-Infinity" "d64 is negative Infinity"

if [gdb_test "next" \
    ".*d128 = 1.2345.*" \
    "next after assigning builtin NaN to d64"] then { gdb_suppress_tests }
gdb_test "print d64" "NaN" "d64 is NaN"

d64_set_tests


# Different tests on 128-bits decimal floating point, including the display
# of finite number, infinite and NaN, and also the setting of different
# decimal value.

if [gdb_test "next" \
    ".*Positive infd128.*" \
    "next after initializing d128"] then { gdb_suppress_tests }
gdb_test "print d128" "1.2345" "d128 is initialized to 1.2345"

d128_set_tests

if [gdb_test "next" \
    ".*Negative infd128.*" \
    "next after assigning builtin infinity to d128"] then { gdb_suppress_tests }
gdb_test "print d128" "Infinity" "d128 is positive Infinity"

if [gdb_test "next" \
    ".*__builtin_nand128.*" \
    "next after assigning negative builtin infinity to d128"] then { gdb_suppress_tests }
gdb_test "print d128" "-Infinity" "d128 is negative Infinity"

if [gdb_test "next" \
    ".*arg0_32.*" \
    "next after assigning builtin NaN to d128"] then { gdb_suppress_tests }
gdb_test "print d128" "NaN" "d128 is NaN"

# The following tests are intended to verify that gdb can correctly handle
# DFP types in function arguments.

gdb_breakpoint arg0_32
gdb_continue_to_breakpoint "entry to arg0_32"
gdb_test "backtrace" ".*arg0_32 \\(arg0=0.1, arg1=1.0, arg2=2.0, arg3=3.0, arg4=4.0, arg5=5.0\\).*" "backtrace at arg0_32"

gdb_breakpoint arg0_64
gdb_continue_to_breakpoint "entry to arg0_64"
gdb_test "backtrace" ".*arg0_64 \\(arg0=0.1, arg1=1.0, arg2=2.0, arg3=3.0, arg4=4.0, arg5=5.0\\).*" "backtrace at arg0_64"

gdb_breakpoint arg0_128
gdb_continue_to_breakpoint "entry to arg0_128"
gdb_test "backtrace" ".*arg0_128 \\(arg0=0.1, arg1=1.0, arg2=2.0, arg3=3.0, arg4=4.0, arg5=5.0\\).*" "backtrace at arg0_128"

# Test calling inferior function with DFP arguments or return value.

send_gdb "call arg0_32 (1.2df, 2.2df, 3.2df, 4.2df, 5.2df, 6.2df)\n"
gdb_test "backtrace 1" "\n#\[0-9\]+  arg0_32 \\(arg0=1.2, arg1=2.2, arg2=3.2, arg3=4.2, arg4=5.2, arg5=6.2\\).*" "Call function with correct _Decimal32 arguments."
gdb_test "finish" " = 1.2" "Correct _Decimal32 return value from called function."

send_gdb "call arg0_64 (1.2dd, 2.2dd, 3.2dd, 4.2dd, 5.2dd, 6.2dd)\n"
gdb_test "backtrace 1" "\n#\[0-9\]+  arg0_64 \\(arg0=1.2, arg1=2.2, arg2=3.2, arg3=4.2, arg4=5.2, arg5=6.2\\).*" "Call function with correct _Decimal64 arguments."
gdb_test "finish" " = 1.2" "Correct _Decimal64 return value from called function."

send_gdb "call arg0_128 (1.2dl, 2.2dl, 3.2dl, 4.2dl, 5.2dl, 6.2dl)\n"
gdb_test "backtrace 1" "\n#\[0-9\]+  arg0_128 \\(arg0=1.2, arg1=2.2, arg2=3.2, arg3=4.2, arg4=5.2, arg5=6.2\\).*" "Call function with correct _Decimal128 arguments."
gdb_test "finish" " = 1.2" "Correct _Decimal128 return value from called function."

gdb_test "call decimal_dec128_align (double_val1, dec128_val2, double_val3, double_val4, double_val5, double_val6, double_val7, double_val8, double_val9, double_val10, double_val11, double_val12, double_val13, double_val14)" " = 1" \
  "Call function with mixed decimal float arguments TEST."

gdb_test "call decimal_mixed (dec32_val1, dec64_val1, dec128_val1)" " = 1" \
  "Call function with mixed decimal float arguments."

gdb_test "call decimal_many_args_dec32 (dec32_val1, dec32_val2, dec32_val3, dec32_val4, dec32_val5, dec32_val6, dec32_val7, dec32_val8, dec32_val9, dec32_val10, dec32_val11, dec32_val12, dec32_val13, dec32_val14, dec32_val15, dec32_val16)" " = 1" \
  "Call function with many _Decimal32 arguments."

gdb_test "call decimal_many_args_dec64 (dec64_val1, dec64_val2, dec64_val3, dec64_val4, dec64_val5, dec64_val6, dec64_val7, dec64_val8, dec64_val9, dec64_val10, dec64_val11, dec64_val12, dec64_val13, dec64_val14, dec64_val15, dec64_val16)" " = 1" \
  "Call function with many _Decimal64 arguments."

gdb_test "call decimal_many_args_dec128 (dec128_val1, dec128_val2, dec128_val3, dec128_val4, dec128_val5, dec128_val6, dec128_val7, dec128_val8, dec128_val9, dec128_val10, dec128_val11, dec128_val12, dec128_val13, dec128_val14, dec128_val15, dec128_val16)" " = 1" \
  "Call function with many _Decimal128 arguments."

gdb_test "call decimal_many_args_mixed (dec32_val1, dec32_val2, dec32_val3, dec64_val4, dec64_val5, dec64_val6, dec64_val7, dec128_val8, dec128_val9, dec128_val10, dec32_val11, dec64_val12, dec32_val13, dec64_val14, dec128_val15)" " = 1" \
  "Call function with many mixed decimal float arguments."

# The following tests are intended to verify that gdb can handle DFP types
# correctly in struct.

gdb_breakpoint [gdb_get_line_number "Exit point"]
gdb_continue_to_breakpoint "Setting a decimal struct"
gdb_test "print ds.dec32" " = 1.2345"
gdb_test "print ds.dec64" " = 1.2345"
gdb_test "print ds.dec128" " = 1.2345"

# Test expressions with DFP variables.

gdb_test "print d32 + ds.dec32" " = 1.3345"
gdb_test "print d64 + ds.dec64" " = 1.3345"
gdb_test "print d128 + ds.dec128" " = 1.3345"

# Test conversion between different _Decimal sizes.

gdb_test "ptype d64 + ds.dec32" " = volatile _Decimal64"
gdb_test "ptype d128 + ds.dec32" " = volatile _Decimal128"
gdb_test "ptype d128 + ds.dec64" " = volatile _Decimal128"

# Mixture of Decimal and integral operands
gdb_test "p d32 + 1" " = 1.1"
gdb_test "p 2 + d64" " = 2.1"
gdb_test "p ds.int4 + d128" " = 1.1"
gdb_test "ptype d32 + 1" " = volatile _Decimal32"
gdb_test "ptype ds.int4 + d128" " = volatile _Decimal128"

# Test other operations with DFP operands
gdb_test "p !d32" " = 0"
gdb_test "p !d64" " = 0"
gdb_test "p !d128" " = 0"
gdb_test "p +d32" " = 0.1"
gdb_test "p +d64" " = 0.1"
gdb_test "p +d128" " = 0.1"
gdb_test "p d64 == d128" " = 1"
gdb_test "p d128 == ds.dec32" " = 0"
gdb_test "p d128 == d32" " = 1"
gdb_test "p ds.dec32 == ds.dec64" " = 1"
gdb_test "p d32 < ds.dec32" " = 1"
gdb_test "p d64 < ds.dec64" " = 1"
gdb_test "p d128 < ds.dec128" " = 1"
gdb_test "p ds.dec32 < d32" " = 0"
gdb_test "p d64 > ds.dec64" " = 0"
gdb_test "p ds.dec128 > d128 " " = 1"
gdb_test "p d32 < ds.int4" " = 1"
gdb_test "p ds.int4 > d32" " = 1"
gdb_test "p ds.dec32 < ds.int4" " = 0"
gdb_test "p ds.int4 > ds.dec64" " = 0"
gdb_test "p ds.dec128 > ds.int4" " = 1"

# Reject operation with integral larger than 32-bits
if { ${sizeof_long} > 4 } {
  gdb_test "p d32 + ds.long8" "Conversion of large integer to a decimal floating type is not supported."
}

# Reject operation with DFP and Binary FP
gdb_test "p d64 + ds.float4" "Mixing decimal floating types with other floating types is not allowed."
gdb_test "p ds.double8 + d128" "Mixing decimal floating types with other floating types is not allowed."

# The following tests are intended to verify that gdb can handle "d1=d2"
# and "d1=-d2" correctly.

gdb_test "print ds.dec32=d32" " = 0.1"
gdb_test "print ds.dec64=d64" " = 0.1"
gdb_test "print ds.dec128=d128" " = 0.1"
gdb_test "print ds.dec32 = -d32" " = -0.1"
gdb_test "print ds.dec64 = -d64" " = -0.1"
gdb_test "print ds.dec128 = -d128" " = -0.1"

# Test cast to and from DFP values

gdb_test "print ds.double8 = ds.dec64" " = -0.(0999.*|1000.*)"
gdb_test "print ds.dec64 = ds.float4" " = 3.(0999.*|1000.*)"
gdb_test "print ds.dec128 = -ds.double8" " = 0.(0999.*|1000.*)"
gdb_test "print ds.dec128 = ds.dec32" " = -0.1"
gdb_test "print ds.dec32 = ds.int4" " = 1"
gdb_test "print ds.int4 = 7.3dl" " = 7"
