1-- C96005A.ADA
2
3--                             Grant of Unlimited Rights
4--
5--     Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
6--     F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained
7--     unlimited rights in the software and documentation contained herein.
8--     Unlimited rights are defined in DFAR 252.227-7013(a)(19).  By making
9--     this public release, the Government intends to confer upon all
10--     recipients unlimited rights  equal to those held by the Government.
11--     These rights include rights to use, duplicate, release or disclose the
12--     released technical data and computer software in whole or in part, in
13--     any manner and for any purpose whatsoever, and to have or permit others
14--     to do so.
15--
16--                                    DISCLAIMER
17--
18--     ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
19--     DISCLOSED ARE AS IS.  THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED
20--     WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
21--     SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE
22--     OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
23--     PARTICULAR PURPOSE OF SAID MATERIAL.
24--*
25-- CHECK THE CORRECTNESS OF THE ADDITION AND SUBTRACTION FUNCTIONS IN
26-- THE PREDEFINED PACKAGE CALENDAR, AND APPROPRIATE EXCEPTION HANDLING.
27-- SPECIFICALLY,
28--   (A) CHECK THAT ADDITION AND SUBTRACTION OPERATORS WORK CORRECTLY ON
29--       VALUES OF TYPE TIME.
30
31-- CPP 8/16/84
32
33WITH CALENDAR;  USE CALENDAR;
34WITH REPORT;  USE REPORT;
35-- WITH TEXT_IO;  USE TEXT_IO;
36PROCEDURE C96005A IS
37
38     -- PACKAGE DURATION_IO IS NEW FIXED_IO (DURATION);
39     -- USE DURATION_IO;
40
41BEGIN
42     TEST ("C96005A", "CHECK THAT THE ADDITION AND SUBTRACTION " &
43           "FUNCTIONS FOR VALUES OF TYPE TIME WORK CORRECTLY");
44
45     -----------------------------------------------
46
47     BEGIN     -- (A)
48
49          -- ADDITION TESTS FOLLOW.
50          DECLARE
51               NOW, NEW_TIME : TIME;
52               INCREMENT : DURATION := 1.0;
53          BEGIN
54               NOW := TIME_OF (1984, 8, 13, 0.0);
55               NEW_TIME := NOW + INCREMENT;
56               IF NEW_TIME /= TIME_OF (1984, 8, 13, 1.0) THEN
57                    FAILED ("SUM OF TIMES IS INCORRECT - (A)1");
58               END IF;
59          END;
60
61
62          DECLARE
63               NOW, NEW_TIME : TIME;
64               INCREMENT : DURATION := 1.0;
65          BEGIN
66               NOW := TIME_OF (1984, 8, 13, 0.0);
67               NEW_TIME :=  INCREMENT + NOW;
68               IF NEW_TIME /= TIME_OF (1984, 8, 13, 1.0) THEN
69                    FAILED ("SUM OF TIMES IS INCORRECT - (A)2");
70               END IF;
71          END;
72
73
74          DECLARE
75               NOW, NEW_TIME : TIME;
76               INCREMENT : DURATION := 1.0;
77          BEGIN
78               NOW := TIME_OF (1984, 8, 13, 0.0);
79               NEW_TIME := "+"(INCREMENT, NOW);
80               IF NEW_TIME /= TIME_OF (1984, 8, 13, 1.0) THEN
81                    FAILED ("SUM OF TIMES IS INCORRECT - (A)3");
82               END IF;
83          END;
84
85
86          DECLARE
87               NOW, NEW_TIME : TIME;
88               INCREMENT : DURATION := 1.0;
89          BEGIN
90               NOW := TIME_OF (1984, 8, 13, 0.0);
91               NEW_TIME := "+"(LEFT => NOW,
92                               RIGHT => INCREMENT);
93               IF NEW_TIME /= TIME_OF (1984, 8, 13, 1.0) THEN
94                    FAILED ("SUM OF TIMES IS INCORRECT - (A)4");
95               END IF;
96          END;
97
98
99          -- SUBTRACTION TESTS FOLLOW.
100          DECLARE
101               NOW, ONCE : TIME;
102               DIFFERENCE : DURATION;
103          BEGIN
104               NOW := TIME_OF (1984, 8, 13, 45_000.0);
105               ONCE := TIME_OF (1984, 8, 12, 45_000.0);
106               DIFFERENCE := NOW - ONCE;
107               IF DIFFERENCE /= 86_400.0 THEN
108                    FAILED ("DIFFERENCE OF TIMES IS INCORRECT - (A)1");
109                    -- COMMENT ("DIFFERENCE YIELDS: ");
110                    -- PUT (DIFFERENCE);
111               END IF;
112          END;
113
114
115          DECLARE
116          -- TIMES IN DIFFERENT MONTHS.
117               NOW, ONCE : TIME;
118               DIFFERENCE : DURATION;
119          BEGIN
120               NOW := TIME_OF (1984, 8, IDENT_INT(1), 60.0);
121               ONCE := TIME_OF (1984, 7, 31, 86_399.0);
122               DIFFERENCE := "-"(NOW, ONCE);
123               IF DIFFERENCE /= 61.0 THEN
124                    FAILED ("DIFFERENCE OF TIMES IS INCORRECT - (A)2");
125                    -- COMMENT ("DIFFERENCE YIELDS: ");
126                    -- PUT (DIFFERENCE);
127               END IF;
128          END;
129
130
131          DECLARE
132          -- TIMES IN DIFFERENT YEARS.
133               NOW, AFTER : TIME;
134               DIFFERENCE : DURATION;
135          BEGIN
136               NOW := TIME_OF (IDENT_INT(1999), 12, 31, 86_399.0);
137               AFTER := TIME_OF (2000, 1, 1, 1.0);
138               DIFFERENCE := "-"(LEFT => AFTER,
139                                 RIGHT => NOW);
140               IF DIFFERENCE /= 2.0 THEN
141                    FAILED ("DIFFERENCE OF TIMES IS INCORRECT - (A)3");
142                    -- COMMENT ("DIFFERENCE YIELDS: ");
143                    -- PUT (DIFFERENCE);
144               END IF;
145          END;
146
147
148          DECLARE
149          -- TIMES IN A LEAP YEAR.
150               NOW, LEAP : TIME;
151               DIFFERENCE : DURATION;
152          BEGIN
153               NOW := TIME_OF (1984, 3, 1);
154               LEAP := TIME_OF (1984, 2, 29, 86_399.0);
155               DIFFERENCE := NOW - LEAP;
156               IF DIFFERENCE /= 1.0 THEN
157                    FAILED ("DIFFERENCE OF TIMES IS INCORRECT - (A)4");
158                    -- COMMENT ("DIFFERENCE YIELDS: ");
159                    -- PUT (DIFFERENCE);
160               END IF;
161          END;
162
163
164          DECLARE
165          -- TIMES IN A NON-LEAP YEAR.
166               NOW, NON_LEAP : TIME;
167               DIFFERENCE : DURATION;
168          BEGIN
169               NOW := TIME_OF (1983, 3, 1);
170               NON_LEAP := TIME_OF (1983, 2, 28, 86_399.0);
171               DIFFERENCE := NOW - NON_LEAP;
172               IF DIFFERENCE /= 1.0 THEN
173                    FAILED ("DIFFERENCE OF TIMES IS INCORRECT - (A)5");
174                    -- COMMENT ("DIFFERENCE YIELDS: ");
175                    -- PUT (DIFFERENCE);
176               END IF;
177          END;
178
179
180          -- SUBTRACTION TESTS FOLLOW: TIME - DURATION.
181          DECLARE
182               NOW, NEW_TIME : TIME;
183               INCREMENT : DURATION := 1.0;
184          BEGIN
185               NOW := TIME_OF (1984, 8, 13, 0.0);
186               NEW_TIME := NOW - INCREMENT;
187               IF NEW_TIME /= TIME_OF (1984, 8, 12, 86_399.0) THEN
188                    FAILED ("DIFFERENCE OF TIME AND DURATION IS " &
189                            "INCORRECT - (A)6");
190               END IF;
191          END;
192
193
194          DECLARE
195               NOW, NEW_TIME : TIME;
196               INCREMENT : DURATION := 1.0;
197          BEGIN
198               NOW := TIME_OF (1984, 8, 1, 0.0);
199               NEW_TIME := NOW - INCREMENT;
200               IF NEW_TIME /= TIME_OF (1984, 7, 31, 86_399.0) THEN
201                    FAILED ("DIFFERENCE OF TIME AND DURATION IS " &
202                            "INCORRECT - (A)7");
203               END IF;
204          END;
205
206
207          DECLARE
208               NOW, NEW_TIME : TIME;
209               INCREMENT : DURATION := 1.0;
210          BEGIN
211               NOW := TIME_OF (1984, 8, 1, 0.0);
212               NEW_TIME := "-"(LEFT => NOW,
213                               RIGHT => INCREMENT);
214               IF NEW_TIME /= TIME_OF (1984, 7, 31, 86_399.0) THEN
215                    FAILED ("DIFFERENCE OF TIME AND DURATION IS " &
216                            "INCORRECT - (A)8");
217               END IF;
218          END;
219
220
221          DECLARE
222               NOW, NEW_TIME : TIME;
223               INCREMENT : DURATION := 1.0;
224          BEGIN
225               NOW := TIME_OF (1984, 8, 1, 0.0);
226               NEW_TIME := "-"(NOW, INCREMENT);
227               IF NEW_TIME /= TIME_OF (1984, 7, 31, 86_399.0) THEN
228                    FAILED ("DIFFERENCE OF TIME AND DURATION IS " &
229                            "INCORRECT - (A)7");
230               END IF;
231          END;
232
233
234     END; -- (A)
235
236     -----------------------------------------------
237
238     RESULT;
239END C96005A;
240