# Copyright (C) 2007-2024 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 contains test for evaluating
# simple decimal floating point (DFP) expression.

proc test_dfp_literals_accepted {} {

    # Test various dfp values, covering 32-bit, 64-bit and 128-bit ones

    # _Decimal32 constants, which can support up to 7 digits
    gdb_test "p 1.2df" " = 1.2"
    gdb_test "p -1.2df" " = -1.2"
    gdb_test "p 1.234567df" " = 1.234567"
    gdb_test "p -1.234567df" " = -1.234567"
    gdb_test "p 1234567.df" " = 1234567"
    gdb_test "p -1234567.df" " = -1234567"

    gdb_test "p 1.2E1df" " = 12"
    gdb_test "p 1.2E10df" " = 1.2E\\+10"
    gdb_test "p 1.2E-10df" " = 1.2E-10"

    # The largest exponent for 32-bit dfp value is 96.
    gdb_test "p 1.2E96df" " = 1.200000E\\+96"

    # _Decimal64 constants, which can support up to 16 digits
    gdb_test "p 1.2dd" " = 1.2"
    gdb_test "p -1.2dd" " = -1.2"
    gdb_test "p 1.234567890123456dd" " = 1.234567890123456"
    gdb_test "p -1.234567890123456dd" " = -1.234567890123456"
    gdb_test "p 1234567890123456.dd" " = 1234567890123456"
    gdb_test "p -1234567890123456.dd" " = -1234567890123456"

    gdb_test "p 1.2E1dd" " = 12"
    gdb_test "p 1.2E10dd" " = 1.2E\\+10"
    gdb_test "p 1.2E-10dd" " = 1.2E-10"

    # The largest exponent for 64-bit dfp value is 384.
    gdb_test "p 1.2E384dd" " = 1.200000000000000E\\+384"

    # _Decimal128 constants, which can support up to 34 digits
    gdb_test "p 1.2dl" " = 1.2"
    gdb_test "p -1.2dl" " = -1.2"
    gdb_test "p 1.234567890123456789012345678901234dl" " = 1.234567890123456789012345678901234"
    gdb_test "p -1.234567890123456789012345678901234dl" " = -1.234567890123456789012345678901234"
    gdb_test "p 1234567890123456789012345678901234.dl" " = 1234567890123456789012345678901234"
    gdb_test "p -1234567890123456789012345678901234.dl" " = -1234567890123456789012345678901234"

    gdb_test "p 1.2E1dl" " = 12"
    gdb_test "p 1.2E10dl" " = 1.2E\\+10"
    gdb_test "p 1.2E-10dl" " = 1.2E-10"

    # The largest exponent for 128-bit dfp value is 6144.
    gdb_test "p 1.2E6144dl" " = 1.200000000000000000000000000000000E\\+6144"
}

proc test_dfp_arithmetic_expressions {} {

    # _Decimal32 operands.
    gdb_test "p 1.4df + 1.2df" " = 2.6"
    gdb_test "p 1.4df - 1.2df" " = 0.2"
    gdb_test "p 1.4df * 1.2df" " = 1.68"
    gdb_test "p 1.4df / 1.2df" " = 1.166667"

    # _Decimal64 operands.
    gdb_test "p 1.4dd + 1.2dd" " = 2.6"
    gdb_test "p 1.4dd - 1.2dd" " = 0.2"
    gdb_test "p 1.4dd * 1.2dd" " = 1.68"
    gdb_test "p 1.4dd / 1.2dd" " = 1.166666666666667"

    # _Decimal128 operands.
    gdb_test "p 1.4dl + 1.2dl" " = 2.6"
    gdb_test "p 1.4dl - 1.2dl" " = 0.2"
    gdb_test "p 1.4dl * 1.2dl" " = 1.68"
    gdb_test "p 1.4dl / 1.2dl" " = 1.166666666666666666666666666666667"

    # Test type of operation result.
    gdb_test "ptype 2.df + 2.df" "= _Decimal32"
    gdb_test "ptype 2.dd + 2.dd" "= _Decimal64"
    gdb_test "ptype 2.dl + 2.dl" "= _Decimal128"

    # Mixture of different _Decimal sizes.
    gdb_test "p 2.1df + 2.7dd" "= 4.8"
    gdb_test "p 2.1dd + 2.7df" "= 4.8"
    gdb_test "p 2.6df + 2.7dl" "= 5.3"
    gdb_test "p 2.6dl + 2.7df" "= 5.3"
    gdb_test "p 2.3dd + 2.2dl" "= 4.5"
    gdb_test "p 2.3dl + 2.2dd" "= 4.5"
    gdb_test "ptype 2.df + 2.dd" "= _Decimal64"
    gdb_test "ptype 2.df + 2.dl" "= _Decimal128"
    gdb_test "ptype 2.dd + 2.dl" "= _Decimal128"

    # Mixture of Decimal and integral operands
    gdb_test "p 1.2df + 1" " = 2.2"
    gdb_test "p 2 + 1.7dd" " = 3.7"
    gdb_test "p 3 + 2.1dl" " = 5.1"
    gdb_test "ptype 1.2df + 1" " = _Decimal32"
    gdb_test "ptype 2 + 1.7dd" " = _Decimal64"
    gdb_test "ptype 3 + 2.1dl" " = _Decimal128"

    # Reject operation with integral larger than 32-bits
    gdb_test "p 1.2dd + 2ll" "= 3.2"
    gdb_test "p 1.2dd + 2147483648ll" "Conversion of large integer to a decimal floating type is not supported."
    gdb_test "p 1.2dd + 2147483648ull" "= 2147483649.2"
    gdb_test "p 1.2dd + 4294967296ull" "Conversion of large integer to a decimal floating type is not supported."

    # Reject operation with DFP and Binary FP
    gdb_test "p 1.2df + 1.2f" "Mixing decimal floating types with other floating types is not allowed."

    # Test other operations with DFP operands

    set dsuffix {"dd" "df" "dl"}

    foreach l $dsuffix {
        foreach r $dsuffix {
	    gdb_test "p 1.2${l} == 1.2${r}" " = 1"
	    gdb_test "p 1.2${l} == 1.3${r}" " = 0"

	    gdb_test "p 1.2${l} < 1.2${r}" " = 0"
	    gdb_test "p 1.2${l} < 1.3${r}" " = 1"
	    gdb_test "p 1.3${l} < 1.2${r}" " = 0"

	    gdb_test "p 1.2${l} > 1.2${r}" " = 0"
	    gdb_test "p 1.2${l} > 1.3${r}" " = 0"
	    gdb_test "p 1.3${l} > 1.2${r}" " = 1"

	    gdb_test "p 1.2${l} <= 1.2${r}" " = 1"
	    gdb_test "p 1.2${l} <= 1.3${r}" " = 1"
	    gdb_test "p 1.3${l} <= 1.2${r}" " = 0"

	    gdb_test "p 1.2${l} >= 1.2${r}" " = 1"
	    gdb_test "p 1.2${l} >= 1.3${r}" " = 0"
	    gdb_test "p 1.3${l} >= 1.2${r}" " = 1"
	}

	gdb_test "p !0.${l}" " = 1"
	gdb_test "p !0.5${l}" " = 0"

	gdb_test "p +1.2${l}" " = 1.2"

	# This checks GDB doesn't convert to int and rounds up/down.
	gdb_test "p 1.2${l} == 1" " = 0"
	gdb_test "p 1.2${l} == 2" " = 0"

	gdb_test "p 1.2${l} == 1.2" \
	    "Mixing decimal floating types with other floating types is not allowed\\."

	gdb_test "p 1.2${l} > 1" " = 1"
	gdb_test "p 1.2${l} > 2" " = 0"
	gdb_test "p 1.2${l} >= 1" " = 1"
	gdb_test "p 1.2${l} >= 2" " = 0"

	gdb_test "p 1.2${l} < 1" " = 0"
	gdb_test "p 1.2${l} < 2" " = 1"
	gdb_test "p 1.2${l} <= 1" " = 0"
	gdb_test "p 1.2${l} <= 2" " = 1"

	gdb_test "p 1 < 1.2${l}" " = 1"
	gdb_test "p 2 < 1.2${l}" " = 0"
	gdb_test "p 1 <= 1.2${l}" " = 1"
	gdb_test "p 2 <= 1.2${l}" " = 0"

	gdb_test "p 1 > 1.2${l}" " = 0"
	gdb_test "p 2 > 1.2${l}" " = 1"
	gdb_test "p 1 >= 1.2${l}" " = 0"
	gdb_test "p 2 >= 1.2${l}" " = 1"
    }
}

proc test_dfp_conversions {} {
    # Test cast to and from DFP values, and between DFPs of different sizes

    gdb_test "p (float) -0.1df" " = -0.(0999.*|1000.*)"
    gdb_test "p (int) 8.3dd" " = 8"
    gdb_test "p (_Decimal64) 3.1" " = 3.(0999.*|1000.*)"
    gdb_test "p (_Decimal128) 3.7df" " = 3.7"
    gdb_test "p (_Decimal32) 4" " = 4"
}

clean_restart

test_dfp_literals_accepted
test_dfp_arithmetic_expressions
test_dfp_conversions
