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

load_lib "ada.exp"

require allow_ada_tests

standard_ada_testfile foo

set cfile "inc"
set csrcfile ${srcdir}/${subdir}/${testdir}/${cfile}.c
set cobject [standard_output_file ${cfile}.o]

gdb_compile "${csrcfile}" "${cobject}" object [list debug]
if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug additional_flags=-largs additional_flags=${cobject} additional_flags=-margs]] != "" } {
  return -1
}

clean_restart ${testfile}

set bp_location [gdb_get_line_number "STOP" ${testdir}/foo.adb]
runto "foo.adb:$bp_location"

gdb_test "ptype m" \
         "array \\(1 \\.\\. 1, 2 \\.\\. 3, 4 \\.\\. 6\\) of integer"

gdb_test "print m'first" " = 1"
gdb_test "print m'last" " = 1"
gdb_test "print m'length" " = 1"

gdb_test "print m'first(1)" " = 1"
gdb_test "print m'last(1)" " = 1"
gdb_test "print m'length(1)" " = 1"

gdb_test "print m'first(2)" " = 2"
gdb_test "print m'last(2)" " = 3"
gdb_test "print m'length(2)" " = 2"

gdb_test "print m'first(3)" " = 4"
gdb_test "print m'last(3)" " = 6"
gdb_test "print m'length(3)" " = 3"

gdb_test "ptype global_3dim_for_gdb_testing" \
         "array \\(0 \\.\\. 0, 0 \\.\\. 1, 0 \\.\\. 2\\) of int"

gdb_test "print global_3dim_for_gdb_testing'first" " = 0"
gdb_test "print global_3dim_for_gdb_testing'last" " = 0"
gdb_test "print global_3dim_for_gdb_testing'length" " = 1"

gdb_test "print global_3dim_for_gdb_testing'first(1)" " = 0"
gdb_test "print global_3dim_for_gdb_testing'last(1)" " = 0"
gdb_test "print global_3dim_for_gdb_testing'length(1)" " = 1"

gdb_test "print global_3dim_for_gdb_testing'first(2)" " = 0"
gdb_test "print global_3dim_for_gdb_testing'last(2)" " = 1"
gdb_test "print global_3dim_for_gdb_testing'length(2)" " = 2"

gdb_test "print global_3dim_for_gdb_testing'first(3)" " = 0"
gdb_test "print global_3dim_for_gdb_testing'last(3)" " = 2"
gdb_test "print global_3dim_for_gdb_testing'length(3)" " = 3"
