[RFA/testsuite/ada] fixed-point types with overprecise deltas

Jerome Guitton
2009-03-19T13:49:00Z

[-- Attachment #1: Type: text/plain, Size: 323 bytes --]

This is a new testcase for a bug with Ada fixed-point types, fixed by
this patch:

http://sourceware.org/ml/gdb-patches/2009-03/msg00186.html

OK to apply?

2009-03-19 Jerome Guitton <guitton@adacore.com>

* gdb.ada/fixed_points/fixed_points.adb: Add a test on overprecise
deltas.
* gdb.ada/fixed_points.exp: Ditto.

[-- Attachment #2: fixed_point_test.diff --]
[-- Type: text/x-diff, Size: 2953 bytes --]

Index: fixed_points.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.ada/fixed_points.exp,v
retrieving revision 1.10
diff -u -p -r1.10 fixed_points.exp
--- fixed_points.exp 3 Jan 2009 05:57:58 -0000 1.10
+++ fixed_points.exp 19 Mar 2009 12:09:59 -0000
@@ -37,6 +37,8 @@ gdb_load ${binfile}
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"
@@ -48,3 +50,11 @@ gdb_test "print subtype_object" \
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" \
+ "= delta 0.135791"
Index: fixed_points/fixed_points.adb
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.ada/fixed_points/fixed_points.adb,v
retrieving revision 1.5
diff -u -p -r1.5 fixed_points.adb
--- fixed_points/fixed_points.adb 3 Jan 2009 05:57:59 -0000 1.5
+++ fixed_points/fixed_points.adb 19 Mar 2009 12:09:59 -0000
@@ -17,22 +17,47 @@ with System;

procedure Fixed_Points is

+ ------------
+ -- Test 1 --
+ ------------
+
+ -- Fixed point subtypes
+
type Base_Fixed_Point_Type is
delta 1.0 / 16.0
range (System.Min_Int / 2) * 1.0 / 16.0 ..
(System.Max_Int / 2) * 1.0 / 16.0;

- subtype Fixed_Point_Subtype is
- Base_Fixed_Point_Type range -50.0 .. 50.0;
+ subtype Fixed_Point_Subtype is
+ Base_Fixed_Point_Type range -50.0 .. 50.0;
+
+ type New_Fixed_Point_Type is
+ new Base_Fixed_Point_Type range -50.0 .. 50.0;
+
+ Base_Object : Base_Fixed_Point_Type := -50.0;
+ Subtype_Object : Fixed_Point_Subtype := -50.0;
+ New_Type_Object : New_Fixed_Point_Type := -50.0;
+
+
+ ------------
+ -- Test 2 --
+ ------------
+
+ -- Overprecise delta
+
+ Overprecise_Delta : constant := 0.135791357913579;
+ -- delta whose significant figures cannot be stored into a long.
+
+ type Overprecise_Fixed_Point is
+ delta Overprecise_Delta range 0.0 .. 200.0;
+ for Overprecise_Fixed_Point'Small use Overprecise_Delta;

- type New_Fixed_Point_Type is
- new Base_Fixed_Point_Type range -50.0 .. 50.0;
+ Overprecise_Object : Overprecise_Fixed_Point :=
+ Overprecise_Fixed_Point'Small;

- Base_Object : Base_Fixed_Point_Type := -50.0;
- Subtype_Object : Fixed_Point_Subtype := -50.0;
- New_Type_Object : New_Fixed_Point_Type := -50.0;
begin
Base_Object := 1.0/16.0; -- Set breakpoint here
Subtype_Object := 1.0/16.0;
New_Type_Object := 1.0/16.0;
+ Overprecise_Object := Overprecise_Fixed_Point'Small * 2;
end Fixed_Points;