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

load_lib "ada.exp"

if { [skip_ada_tests] } { return -1 }

standard_ada_testfile foo_na09_042

# Note we don't test the "none" (no -fgnat-encodings option) scenario
# here, because "all" and "minimal" cover the cases, and this way we
# don't have to update the test when gnat changes its default.
foreach_with_prefix scenario {all minimal} {
    set flags [list debug additional_flags=-fgnat-encodings=$scenario]

    if {[gdb_compile_ada "${srcfile}" "${binfile}" executable $flags] != ""} {
	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: array \\((<>|1 \\.\\. i)\\) of character;" \
	     "end record"]
}
