# Copyright 2019-2023 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 tests GDB's handling of Fortran builtin intrinsic functions.

load_lib "fortran.exp"

require allow_fortran_tests

standard_testfile .f90

if { [prepare_for_testing "failed to prepare" $testfile $srcfile {debug f90}] } {
    return -1
}

if { ![fortran_runto_main] } {
    perror "Could not run to main."
    return
}

gdb_breakpoint [gdb_get_line_number "stop-here"]
gdb_continue_to_breakpoint "stop-here" ".*stop-here.*"

# Test KIND

gdb_test "p kind (l1)" " = 1"
gdb_test "p kind (l2)" " = 2"
gdb_test "p kind (l4)" " = 4"
gdb_test "p kind (l8)" " = 8"
gdb_test "p kind (s1)" "argument to kind must be an intrinsic type"

# Test ABS

gdb_test "p abs (-11)" " = 11"
gdb_test "p abs (11)" " = 11"
# Use `$decimal` to match here as we depend on host floating point
# rounding, which can vary.
gdb_test "p abs (-9.1)" " = 9.$decimal"
gdb_test "p abs (9.1)" " = 9.$decimal"

# Test MOD

gdb_test "p mod (3.0, 2.0)" " = 1"
gdb_test "ptype mod (3.0, 2.0)" "type = real\\*8"
gdb_test "p mod (2.0, 3.0)" " = 2"
gdb_test "p mod (8, 5)" " = 3"
gdb_test "ptype mod (8, 5)" "type = int"
gdb_test "p mod (-8, 5)" " = -3"
gdb_test "p mod (8, -5)" " = 3"
gdb_test "p mod (-8, -5)" " = -3"

# Test CEILING and FLOOR.

gdb_test "p floor (3.7)" " = 3"
gdb_test "p ceiling (3.7)" " = 4"

gdb_test "p floor (-3.7)" " = -4"
gdb_test "p ceiling (-3.7)" " = -3"

gdb_test "p ceiling (3)" "argument to CEILING must be of type float"
gdb_test "p floor (1)" "argument to FLOOR must be of type float"

foreach op {floor ceiling} {
    gdb_test "ptype ${op} (3.7)" "integer\\*4"
    gdb_test "ptype ${op} (-1.1, 1)" "type = integer\\*1"
    gdb_test "ptype ${op} (-1.1, 2)" "type = integer\\*2"
    gdb_test "ptype ${op} (-1.1, 3)" "unsupported kind 3 for type integer\\*4"
    gdb_test "ptype ${op} (-1.1, 4)" "type = integer\\*4"
    gdb_test "ptype ${op} (-1.1, 8)" "type = integer\\*8"

    # The actual overflow behavior differs in ifort/ifx/gfortran - this tests
    # the GDB internal overflow behavior - not a compiler dependent one.
    gdb_test "p ${op} (129.0,1)" " = -127"
    gdb_test "p ${op} (129.0,2)" " = 129"
    gdb_test "p ${op} (-32770.0,1)" " = -2"
    gdb_test "p ${op} (-32770.0,2)" " = 32766"
    gdb_test "p ${op} (-32770.0,4)" " = -32770"
    gdb_test "p ${op} (2147483652.0,1)" " = 4"
    gdb_test "p ${op} (2147483652.0,2)" " = 4"
    gdb_test "p ${op} (2147483652.0,4)" " = -2147483644"
    gdb_test "p ${op} (2147483652.0,8)" " = 2147483652"
}

# Test MODULO

gdb_test "p MODULO (8,5)" " = 3"
gdb_test "ptype MODULO (8,5)" "type = int"
gdb_test "p MODULO (-8,5)" " = 2"
gdb_test "p MODULO (8,-5)" " = -2"
gdb_test "p MODULO (-8,-5)" " = -3"
gdb_test "p MODULO (3.0,2.0)" " = 1"
gdb_test "ptype MODULO (3.0,2.0)" "type = real\\*8"

# Test CMPLX

gdb_test "p CMPLX (4.1, 2.0)" " = \\(4.$decimal,2\\)"

gdb_test "p cmplx (4,4)" "= \\(4,4\\)"
gdb_test "ptype cmplx (4,4)" "= complex\\*4"
gdb_test "p cmplx (-14,-4)" "= \\(-14,-4\\)"
gdb_test "p cmplx (4,4,4)" "\\(4,4\\)"
gdb_test "p cmplx (4,4,8)" "\\(4,4\\)"
gdb_test "p cmplx (4,4,16)" "\\(4,4\\)"
gdb_test "ptype cmplx (4,4,4)" "= complex\\*4"
gdb_test "ptype cmplx (4,4,8)" "= complex\\*8"
gdb_test "ptype cmplx (4,4,16)" "= complex\\*16"

gdb_test "p cmplx (4,4,1)" "unsupported kind 1 for type complex\\*4"
gdb_test "p cmplx (4,4,-1)" "unsupported kind -1 for type complex\\*4"
gdb_test "p cmplx (4,4,2)" "unsupported kind 2 for type complex\\*4"

# Test LOC

gdb_test "p/x LOC(l)" "= $hex"
gdb_test "ptype loc(l)" "type = integer(\\*$decimal)?"
