# Copyright 2004-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 fixed_points

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 "Set breakpoint here" ${testdir}/fixed_points.adb]
    runto "fixed_points.adb:$bp_location"

    # Fixed point subtypes:

    gdb_test "print base_object" \
	"= -50" \
	"p on a fixed point type"

    gdb_test "print subtype_object" \
	"= -50" \
	"p on a subtype fixed point type"

    gdb_test "print new_type_object" \
	"= -50" \
	"p on a new fixed point type"

    # Overprecise delta:

    gdb_test "print Overprecise_Object" \
	"= 0.13579135791"

    gdb_test "ptype Overprecise_Object" \
	"type = <2-byte fixed point \\(small = 135791357913579/1000000000000000\\)>"

    # FP*_Var...

    gdb_test "print fp1_var" \
	" = 0.25"

    gdb_test "ptype fp1_var" "type = <1-byte fixed point \\(small = 1/16\\)>"

    gdb_test "print fp2_var" \
	" = -0.01"

    gdb_test "ptype fp2_var" "type = <8-byte fixed point \\(small = 1/100\\)>"

    gdb_test "print fp3_var" \
	" = 0.1"

    gdb_test "ptype fp3_var" "type = <1-byte fixed point \\(small = 1/30\\)>"

    gdb_test "print fp2_var + 0" \
	" = -0.01"
    gdb_test "print 0 + fp2_var" \
	" = -0.01"
    gdb_test "print fp2_var - 0" \
	" = -0.01"

    gdb_test "print + fp2_var" \
	" = -0.01"
    gdb_test "print - fp2_var" \
	" = 0.01"

    set fp4 "= 2e-07"
    gdb_test "print fp4_var" $fp4
    gdb_test "print fp4_var * 1" $fp4
    gdb_test "print 1 * fp4_var" $fp4
    gdb_test "print fp4_var / 1" $fp4

    # This only started working in GCC 11.
    if {$scenario == "minimal" && [test_compiler_info {gcc-11-*}]} {
	gdb_test "print fp5_var" " = 3e-19"
    }
}
