113546Sjulian# Copyright 2004-2023 Free Software Foundation, Inc.
235509Sjb#
313546Sjulian# This program is free software; you can redistribute it and/or modify
413546Sjulian# it under the terms of the GNU General Public License as published by
513546Sjulian# the Free Software Foundation; either version 3 of the License, or
613546Sjulian# (at your option) any later version.
713546Sjulian#
813546Sjulian# This program is distributed in the hope that it will be useful,
913546Sjulian# but WITHOUT ANY WARRANTY; without even the implied warranty of
1013546Sjulian# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1113546Sjulian# GNU General Public License for more details.
1213546Sjulian#
1313546Sjulian# You should have received a copy of the GNU General Public License
1413546Sjulian# along with this program.  If not, see <http://www.gnu.org/licenses/>.
1513546Sjulian
1613546Sjulianload_lib "ada.exp"
1713546Sjulian
1813546Sjulianif { [skip_ada_tests] } { return -1 }
1913546Sjulian
2013546Sjulianstandard_ada_testfile fixed_points
2113546Sjulian
2213546Sjulianforeach_with_prefix scenario {all minimal} {
2313546Sjulian    set flags [list debug additional_flags=-fgnat-encodings=$scenario]
2413546Sjulian    if {[gdb_compile_ada "${srcfile}" "${binfile}-${scenario}" executable $flags] != ""} {
2513546Sjulian	return -1
2613546Sjulian    }
2713546Sjulian
2813546Sjulian    clean_restart ${testfile}-${scenario}
2913546Sjulian
3013546Sjulian    set bp_location [gdb_get_line_number "Set breakpoint here" ${testdir}/fixed_points.adb]
3113546Sjulian    runto "fixed_points.adb:$bp_location"
3213546Sjulian
3317706Sjulian    # Fixed point subtypes:
3413546Sjulian
3517706Sjulian    gdb_test "print base_object" \
3617706Sjulian	"= -50" \
3713546Sjulian	"p on a fixed point type"
3813546Sjulian
3913546Sjulian    gdb_test "print subtype_object" \
4013546Sjulian	"= -50" \
4113546Sjulian	"p on a subtype fixed point type"
4213546Sjulian
4313546Sjulian    gdb_test "print new_type_object" \
4417706Sjulian	"= -50" \
4517706Sjulian	"p on a new fixed point type"
4617706Sjulian
4717706Sjulian    # Overprecise delta:
4817706Sjulian
4917706Sjulian    gdb_test "print Overprecise_Object" \
5013546Sjulian	"= 0.13579135791"
5117706Sjulian
5217706Sjulian    gdb_test "ptype Overprecise_Object" \
5317706Sjulian	"type = <2-byte fixed point \\(small = 135791357913579/1000000000000000\\)>"
5417706Sjulian
5517706Sjulian    # FP*_Var...
5617706Sjulian
5717706Sjulian    gdb_test "print fp1_var" \
5817706Sjulian	" = 0.25"
5917706Sjulian
6017706Sjulian    gdb_test "ptype fp1_var" "type = <1-byte fixed point \\(small = 1/16\\)>"
6117706Sjulian
6217706Sjulian    gdb_test "print fp2_var" \
6317706Sjulian	" = -0.01"
6417706Sjulian
6517706Sjulian    gdb_test "ptype fp2_var" "type = <8-byte fixed point \\(small = 1/100\\)>"
6617706Sjulian
6717706Sjulian    gdb_test "print fp3_var" \
6817706Sjulian	" = 0.1"
6917706Sjulian
7017706Sjulian    gdb_test "ptype fp3_var" "type = <1-byte fixed point \\(small = 1/30\\)>"
7117706Sjulian
7217706Sjulian    gdb_test "print fp2_var + 0" \
7317706Sjulian	" = -0.01"
7417706Sjulian    gdb_test "print 0 + fp2_var" \
7517706Sjulian	" = -0.01"
7617706Sjulian    gdb_test "print fp2_var - 0" \
7717706Sjulian	" = -0.01"
7817706Sjulian
7917706Sjulian    gdb_test "print + fp2_var" \
8017706Sjulian	" = -0.01"
8117706Sjulian    gdb_test "print - fp2_var" \
8213546Sjulian	" = 0.01"
8317706Sjulian
8417706Sjulian    set fp4 "= 2e-07"
8517706Sjulian    gdb_test "print fp4_var" $fp4
8613546Sjulian    gdb_test "print fp4_var * 1" $fp4
8713546Sjulian    gdb_test "print 1 * fp4_var" $fp4
8813546Sjulian    gdb_test "print fp4_var / 1" $fp4
8913546Sjulian
90    # This only started working in GCC 11.
91    if {$scenario == "minimal" && [test_compiler_info {gcc-11-*}]} {
92	gdb_test "print fp5_var" " = 3e-19"
93    }
94}
95