1-- C96008A.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-- MISCELLANEOUS CHECKS ON THE PRE-DEFINED FUNCTIONS IN THE PACKAGE
26-- CALENDAR.  SUBTESTS ARE:
27--   (A) TIME_OF() AND SPLIT() ARE INVERSE FUNCTIONS.
28--   (B) FORMAL PARAMETERS OF TIME_OF() AND SPLIT() ARE NAMED CORRECTLY.
29--   (C) TIME_OF() GIVES THE PARAMETER SECONDS A DEFAULT VALUE OF 0.0.
30--   (D) THE FUNCTIONS YEAR(), MONTH(), DAY(), AND SECONDS() RETURN
31--       CORRECT VALUES USING NAMED NOTATION.
32--   (E) A VALUE RETURNED FROM CLOCK() CAN BE PROCESSED BY SPLIT().
33--   (F) DURATION'SMALL MEETS REQUIRED LIMIT.
34
35-- CPP 8/16/84
36
37WITH SYSTEM;
38WITH CALENDAR;  USE CALENDAR;
39WITH REPORT;  USE REPORT;
40PROCEDURE C96008A IS
41
42BEGIN
43     TEST ("C96008A", "CHECK MISCELLANEOUS FUNCTIONS IN THE " &
44           "PACKAGE CALENDAR");
45
46     ---------------------------------------------
47
48     DECLARE   -- (A)
49          NOW : TIME;
50          YR : YEAR_NUMBER;
51          MO : MONTH_NUMBER;
52          DY : DAY_NUMBER;
53          SEC : DAY_DURATION;
54     BEGIN     -- (A)
55          BEGIN
56               NOW := TIME_OF (1984, 8, 13, DURATION(1.0/3.0));
57               SPLIT (NOW, YR, MO, DY, SEC);
58               IF NOW /= TIME_OF (YR, MO, DY, SEC) THEN
59                    COMMENT ("TIME_OF AND SPLIT ARE NOT INVERSES " &
60                             "WHEN SECONDS IS A NON-MODEL NUMBER " &
61                             "- (A)");
62               END IF;
63          EXCEPTION
64               WHEN OTHERS =>
65                    FAILED ("TIME_OF(SPLIT) RAISED EXCEPTION - (A)");
66          END;
67
68
69          BEGIN
70               -- RESET VALUES.
71               YR := 1984;
72               MO := 8;
73               DY := 13;
74               SEC := 1.0;
75
76               SPLIT (TIME_OF (YR, MO, DY, SEC), YR, MO, DY, SEC);
77
78               IF YR /= 1984 THEN
79                    FAILED ("SPLIT(TIME_OF) CHANGED VALUE OF YR - (A)");
80               END IF;
81
82               IF MO /= 8 THEN
83                    FAILED ("SPLIT(TIME_OF) CHANGED VALUE OF MO - (A)");
84               END IF;
85
86               IF DY /= 13 THEN
87                    FAILED ("SPLIT(TIME_OF) CHANGED VALUE OF DY - (A)");
88               END IF;
89
90               IF SEC /= 1.0 THEN
91                    FAILED ("SPLIT(TIME_OF) CHANGED VALUE OF " &
92                            "SEC - (A)");
93               END IF;
94          EXCEPTION
95               WHEN OTHERS =>
96                    FAILED ("SPLIT(TIME_OF) PROCESSING RAISED " &
97                            "EXCEPTION - (A)");
98          END;
99     END; -- (A)
100
101     ---------------------------------------------
102
103     BEGIN     -- (B)
104          DECLARE
105               NOW : TIME;
106          BEGIN
107               NOW := TIME_OF (YEAR => 1984,
108                               MONTH => 8,
109                               DAY => 13,
110                               SECONDS => 60.0);
111          EXCEPTION
112               WHEN OTHERS =>
113                    FAILED ("NAMED ASSOCIATION ON TIME_OF() RAISED " &
114                            "EXCEPTION - (B)");
115          END;
116
117
118          DECLARE
119               NOW : TIME := CLOCK;
120               YR : YEAR_NUMBER := 1984;
121               MO : MONTH_NUMBER := 8;
122               DY : DAY_NUMBER := 13;
123               SEC : DAY_DURATION := 0.0;
124          BEGIN
125               SPLIT (DATE => NOW,
126                      YEAR => YR,
127                      MONTH => MO,
128                      DAY => DY,
129                      SECONDS => SEC);
130          EXCEPTION
131               WHEN OTHERS =>
132                    FAILED ("NAMED ASSOCIATION ON SPLIT() RAISED " &
133                            "EXCEPTION - (B)2");
134          END;
135     END; -- (B)
136
137     ---------------------------------------------
138
139     DECLARE   -- (C)
140          NOW : TIME;
141     BEGIN     -- (C)
142          NOW := TIME_OF (1984, 8, 13);
143          IF SECONDS (NOW) /= 0.0 THEN
144               FAILED ("TIME_OF() DID NOT ZERO SECONDS - (C)");
145          END IF;
146     END; -- (C)
147
148     ---------------------------------------------
149
150     DECLARE   -- (D)
151     -- ASSUMES TIME_OF() WORKS CORRECTLY.
152          HOLIDAY : TIME;
153     BEGIN     -- (D)
154          HOLIDAY := TIME_OF (1958, 9, 9, 1.0);
155
156          IF YEAR (DATE => HOLIDAY) /= 1958 THEN
157               FAILED ("YEAR() DID NOT RETURN CORRECT VALUE - (D)");
158          END IF;
159
160          IF MONTH (DATE => HOLIDAY) /= 9 THEN
161               FAILED ("MONTH() DID NOT RETURN CORRECT VALUE - (D)");
162          END IF;
163
164          IF DAY (DATE => HOLIDAY) /= 9 THEN
165               FAILED ("DAY() DID NOT RETURN CORRECT VALUE - (D)");
166          END IF;
167
168          IF SECONDS (HOLIDAY) /= 1.0 THEN
169               FAILED ("SECONDS() DID NOT RETURN CORRECT VALUE - (D)");
170          END IF;
171     END; -- (D)
172
173     ---------------------------------------------
174
175     DECLARE   -- (E)
176          YR : YEAR_NUMBER;
177          MO : MONTH_NUMBER;
178          DY : DAY_NUMBER;
179          SEC : DAY_DURATION;
180     BEGIN     -- (E)
181          SPLIT (CLOCK, YR, MO, DY, SEC);
182          DELAY SYSTEM.TICK;
183
184          IF TIME_OF (YR, MO, DY, SEC) > CLOCK THEN
185               FAILED ("SPLIT() ON CLOCK INCORRECT - (E)");
186          END IF;
187     EXCEPTION
188          WHEN OTHERS =>
189               FAILED ("SPLIT() ON CLOCK RAISED EXCEPTION - (E)");
190     END; -- (E)
191
192     ---------------------------------------------
193
194     BEGIN     -- (F)
195          IF DURATION'SMALL > 0.020 THEN
196               FAILED ("DURATION'SMALL LARGER THAN SPECIFIED - (F)");
197          END IF;
198     END; -- (F)
199
200     ---------------------------------------------
201
202     RESULT;
203END C96008A;
204