# Copyright 2015-2020 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"

standard_ada_testfile foo_na09_042

if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } {
  return -1
}

clean_restart ${testfile}

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

gdb_test "print a1" \
         " = \\(\\(i => 0, s => \"\"\\), \\(i => 1, s => \"A\"\\), \\(i => 2, s => \"AB\"\\)\\)"

gdb_test "print a1(1)" \
         " = \\(i => 0, s => \"\"\\)"

gdb_test "print a1(2)" \
         " = \\(i => 1, s => \"A\"\\)"

gdb_test "print a1(3)" \
         " = \\(i => 2, s => \"AB\"\\)"

gdb_test "print a2" \
         " = \\(\\(i => 2, s => \"AB\"\\), \\(i => 1, s => \"A\"\\), \\(i => 0, s => \"\"\\)\\)"

gdb_test "print a2(1)" \
         " = \\(i => 2, s => \"AB\"\\)"

gdb_test "print a2(2)" \
         " = \\(i => 1, s => \"A\"\\)"

gdb_test "print a2(3)" \
         " = \\(i => 0, s => \"\"\\)"

gdb_test "ptype a1(1)" \
         [multi_line "type = record" \
                     "    i: pck\\.small_type;" \
                     "    s: access array \\((<>|1 \\.\\. i)\\) of character;" \
                     "end record"]
