# Copyright 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/> .

# Testing GDB's implementation of SHAPE keyword.

if {[skip_fortran_tests]} { return -1 }

standard_testfile ".f90"
load_lib fortran.exp

if {[prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
	 {debug f90}]} {
    return -1
}

if ![fortran_runto_main] {
    return -1
}

gdb_breakpoint [gdb_get_line_number "Test Breakpoint"]
gdb_breakpoint [gdb_get_line_number "Final Breakpoint"]

# We place a limit on the number of tests that can be run, just in
# case something goes wrong, and GDB gets stuck in an loop here.
set found_final_breakpoint false
set test_count 0
while { $test_count < 500 } {
    with_test_prefix "test $test_count" {
	incr test_count

	gdb_test_multiple "continue" "continue" {
	    -re -wrap "! Test Breakpoint" {
		# We can run a test from here.
	    }
	    -re -wrap "! Final Breakpoint" {
		# We're done with the tests.
		set found_final_breakpoint true
	    }
	}

	if ($found_final_breakpoint) {
	    break
	}

	# First grab the expected answer.
	set answer [get_valueof "" "answer" "**unknown**"]

	# Now move up a frame and figure out a command for us to run
	# as a test.
	set command ""
	gdb_test_multiple "up" "up" {
	    -re -wrap "\r\n\[0-9\]+\[ \t\]+call test_shape \\((\[^\r\n\]+)\\)" {
		set command $expect_out(1,string)
	    }
	}

	gdb_assert { ![string equal $command ""] } "found a command to run"

	set answer [string_to_regexp $answer]
	gdb_test "p $command" " = $answer"
    }
}

# Ensure we reached the final breakpoint.  If more tests have been added
# to the test script, and this starts failing, then the safety 'while'
# loop above might need to be increased.
gdb_assert {$found_final_breakpoint} "ran all compiled in tests"

foreach var {array_1d_p array_2d_p allocatable_array_1d \
		 allocatable_array_2d} {
    gdb_test "p shape ($var)" \
	"The array passed to SHAPE must be allocated or associated"
}
