1--  Copyright 2004-2021 Free Software Foundation, Inc.
2--
3--  This program is free software; you can redistribute it and/or modify
4--  it under the terms of the GNU General Public License as published by
5--  the Free Software Foundation; either version 3 of the License, or
6--  (at your option) any later version.
7--
8--  This program is distributed in the hope that it will be useful,
9--  but WITHOUT ANY WARRANTY; without even the implied warranty of
10--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11--  GNU General Public License for more details.
12--
13--  You should have received a copy of the GNU General Public License
14--  along with this program.  If not, see <http://www.gnu.org/licenses/>.
15
16with System;
17with Pck; use Pck;
18
19procedure Fixed_Points is
20
21   ------------
22   -- Test 1 --
23   ------------
24
25   --  Fixed point subtypes
26
27   type Base_Fixed_Point_Type is
28     delta 1.0 / 16.0
29     range -2147483648 * 1.0 / 16.0 ..  2147483647 * 1.0 / 16.0;
30
31   subtype Fixed_Point_Subtype is
32     Base_Fixed_Point_Type range -50.0 .. 50.0;
33
34   type New_Fixed_Point_Type is
35     new Base_Fixed_Point_Type range -50.0 .. 50.0;
36
37   Base_Object            : Base_Fixed_Point_Type := -50.0;
38   Subtype_Object         : Fixed_Point_Subtype := -50.0;
39   New_Type_Object        : New_Fixed_Point_Type := -50.0;
40
41
42   ------------
43   -- Test 2 --
44   ------------
45
46   --  Overprecise delta
47
48   Overprecise_Delta : constant := 0.135791357913579;
49   --  delta whose significant figures cannot be stored into a long.
50
51   type Overprecise_Fixed_Point is
52     delta Overprecise_Delta range 0.0 .. 200.0;
53   for Overprecise_Fixed_Point'Small use Overprecise_Delta;
54
55   Overprecise_Object : Overprecise_Fixed_Point :=
56     Overprecise_Fixed_Point'Small;
57
58   FP5_Var : FP5_Type := 3 * Delta5;
59
60begin
61   Base_Object := 1.0/16.0;   -- Set breakpoint here
62   Subtype_Object := 1.0/16.0;
63   New_Type_Object := 1.0/16.0;
64   Overprecise_Object := Overprecise_Fixed_Point'Small * 2;
65   Do_Nothing (FP1_Var'Address);
66   Do_Nothing (FP2_Var'Address);
67   Do_Nothing (FP3_Var'Address);
68   Do_Nothing (FP4_Var'Address);
69   Do_Nothing (FP5_Var'Address);
70end Fixed_Points;
71