# Copyright 2019-2021 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"

if { [skip_fortran_tests] } { continue }

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."
    continue
}

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

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

# Test FLOOR

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

# 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\\)"

# Test LOC

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