1-- C45342A.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 THAT CATENATION OF TWO OR MORE NON-NULL OPERANDS YIELDS THE
26-- CORRECT RESULT, WITH THE CORRECT BOUNDS, WHETHER BOUNDS ARE STATIC OR
27-- DYNAMIC.
28
29-- BHS 6/27/84
30
31WITH REPORT;
32PROCEDURE C45342A IS
33
34     USE REPORT;
35
36     SUBTYPE S IS INTEGER RANGE 1..100;
37     TYPE ARR IS ARRAY (S RANGE <>) OF INTEGER;
38
39     A,B : ARR (2..9);
40
41     FUNCTION F (AR_VAR1, AR_VAR2, AR_VAR3 : ARR) RETURN ARR IS
42     BEGIN
43          RETURN AR_VAR1 & AR_VAR2 & AR_VAR3;
44     END F;
45
46     PROCEDURE CAT (A : ARR; I1,I2 : INTEGER; NUM : CHARACTER) IS
47     BEGIN
48          IF A'FIRST /= I1 OR A'LAST /= I2 THEN
49               FAILED ("INCORRECT CATENATION BOUNDS - " & NUM);
50          END IF;
51     END CAT;
52
53
54BEGIN
55
56     TEST ("C45342A", "CHECK THAT CATENATION OF NON-NULL OPERANDS " &
57                      "YIELDS CORRECT RESULT WITH CORRECT BOUNDS");
58
59     BEGIN
60          A := (1,2,3,4,5,6,7,8);
61          B := A(2..4) & A(2..5) & A(2..2);
62          IF B /= (1,2,3,1,2,3,4,1) THEN
63               FAILED ("INCORRECT CATENATION RESULT - 1");
64          END IF;
65
66          A := (8,7,6,5,4,3,2,1);
67          IF F(A(2..3), A(2..4), A(2..4)) /= (8,7,8,7,6,8,7,6) THEN
68               FAILED ("INCORRECT CATENATION RESULT - 2");
69          END IF;
70
71          CAT ( A(3..5) & A(2..3), 3, 7, '3' );
72     END;
73
74
75     DECLARE
76          DYN2 : INTEGER := IDENT_INT(2);
77          DYN3 : INTEGER := IDENT_INT(3);
78          DYN4 : INTEGER := IDENT_INT(4);
79          DYN6 : INTEGER := IDENT_INT(6);
80
81     BEGIN
82          A := (1,2,3,4,5,6,7,8);
83          B := A(DYN2..DYN3) & A(DYN2..DYN4) & A(DYN2..DYN4);
84          IF B /= (1,2,1,2,3,1,2,3) THEN
85               FAILED ("INCORRECT CATENATION RESULT - 4");
86          END IF;
87
88          A := (8,7,6,5,4,3,2,1);
89          IF F ( A(DYN2..DYN6), A(DYN2..DYN3), A(DYN2..DYN2) )
90                /= (8,7,6,5,4,8,7,8) THEN
91               FAILED ("INCORRECT CATENATION RESULT - 5");
92          END IF;
93
94          CAT ( A(DYN3..5) & A(2..3), 3, 7, '6');
95     END;
96
97     RESULT;
98
99END C45342A;
100