view gcc/testsuite/ada/acats/tests/cc/cc3016b.ada @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
line wrap: on
line source

-- CC3016B.ADA

--                             Grant of Unlimited Rights
--
--     Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
--     F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained 
--     unlimited rights in the software and documentation contained herein.
--     Unlimited rights are defined in DFAR 252.227-7013(a)(19).  By making 
--     this public release, the Government intends to confer upon all 
--     recipients unlimited rights  equal to those held by the Government.  
--     These rights include rights to use, duplicate, release or disclose the 
--     released technical data and computer software in whole or in part, in 
--     any manner and for any purpose whatsoever, and to have or permit others 
--     to do so.
--
--                                    DISCLAIMER
--
--     ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
--     DISCLOSED ARE AS IS.  THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED 
--     WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
--     SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE 
--     OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
--     PARTICULAR PURPOSE OF SAID MATERIAL.
--*
--  CHECK THAT AN INSTANCE OF A GENERIC PACKAGE MUST DECLARE A
--  PACKAGE. CHECK THAT THE DECLARATIVE ITEMS IN AN INSTANTIATION
--  OF A GENERIC PACKAGE SPECIFICATION ARE ELABORATED IN THE ORDER
--  DECLARED.    

-- HISTORY:
--         EDWARD V. BERARD, 8 AUGUST 1990

WITH REPORT ;

PROCEDURE CC3016B IS
     
    WHEN_ELABORATED : NATURAL := 0 ;
    
    TYPE REAL IS DIGITS 6 ;
    REAL_VALUE : REAL := 3.14159 ;
    
    TRUE_VALUE : BOOLEAN := TRUE ;
    
    CHARACTER_VALUE : CHARACTER := 'Z' ;
          
    TYPE MONTH_TYPE IS (JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG,
                        SEP, OCT, NOV, DEC) ;
    TYPE DAY_TYPE IS RANGE 1 .. 31 ;
    TYPE YEAR_TYPE IS RANGE 1904 .. 2050 ;
    TYPE DATE IS RECORD
      MONTH : MONTH_TYPE ;
      DAY   : DAY_TYPE ;
      YEAR  : YEAR_TYPE ;
    END RECORD ;
          
    TYPE DATE_ACCESS IS ACCESS DATE ;

    THIS_MONTH   : MONTH_TYPE := AUG ;
    THIS_YEAR     : YEAR_TYPE := 1990 ;

    TODAY         : DATE := (MONTH => AUG,
                               DAY   => 8,
                              YEAR  => 1990) ;

    FIRST_DATE   : DATE_ACCESS  := NEW DATE'(DAY   => 6,
                                             MONTH => JUN,
                                             YEAR  => 1967) ;
    
    TYPE DUE_DATES IS ARRAY (MONTH_TYPE RANGE JAN .. DEC) OF DATE ;
    REPORT_DATES : DUE_DATES := ((JAN, 23, 1990), (FEB, 23, 1990),
                                 (MAR, 23, 1990), (APR, 23, 1990),
                                 (MAY, 23, 1990), (JUN, 22, 1990),
                                 (JUL, 23, 1990), (AUG, 23, 1990),
                                 (SEP, 24, 1990), (OCT, 23, 1990),
                                 (NOV, 23, 1990), (DEC, 20, 1990)) ;
                                 
    TYPE LIST_INDEX IS RANGE 1 .. 16 ;
    TYPE LIST IS ARRAY (LIST_INDEX) OF NATURAL ;
    ORDER_LIST : LIST := (OTHERS => 0) ;

    GENERIC
    
        TYPE RETURN_TYPE IS PRIVATE ;
        RETURN_VALUE : IN OUT RETURN_TYPE ;
        POSITION      : IN       NATURAL ;
        OFFSET        : IN       NATURAL ;
        WHEN_ELAB     : IN OUT NATURAL ;
        TYPE INDEX IS RANGE <> ;
        TYPE LIST IS ARRAY (INDEX) OF NATURAL ;
        ORDER_LIST      : IN OUT LIST ;
    
    FUNCTION NAME (VALUE : IN NATURAL) RETURN RETURN_TYPE ;
    
    FUNCTION NAME (VALUE : IN NATURAL) RETURN RETURN_TYPE IS
    
    BEGIN -- NAME
        
        IF (VALUE = POSITION) THEN
          WHEN_ELAB := NATURAL'SUCC (WHEN_ELAB) ;
          ORDER_LIST (INDEX (POSITION)) := WHEN_ELAB ;
          RETURN RETURN_VALUE ;
        ELSIF (VALUE = (POSITION + OFFSET)) THEN
          WHEN_ELAB := NATURAL'SUCC (WHEN_ELAB) ;
          ORDER_LIST (INDEX (POSITION + OFFSET)) := WHEN_ELAB ;
          RETURN RETURN_VALUE ;
        END IF ;
    
    END NAME ;
    
    GENERIC
    
        TYPE FIRST_TYPE IS PRIVATE ;
        WITH FUNCTION FIRST (POSITION : IN NATURAL) 
                            RETURN FIRST_TYPE ;
        FIRST_VALUE : IN NATURAL ;
        TYPE SECOND_TYPE IS PRIVATE ;
        WITH FUNCTION SECOND (POSITION : IN NATURAL) 
                            RETURN SECOND_TYPE ;
        SECOND_VALUE : IN NATURAL ;
        TYPE THIRD_TYPE IS PRIVATE ;
        WITH FUNCTION THIRD (POSITION : IN NATURAL) 
                            RETURN THIRD_TYPE ;
        THIRD_VALUE : IN NATURAL ;
        TYPE FOURTH_TYPE IS PRIVATE ;
        WITH FUNCTION FOURTH (POSITION : IN NATURAL) 
                            RETURN FOURTH_TYPE ;
        FOURTH_VALUE : IN NATURAL ;
        TYPE FIFTH_TYPE IS PRIVATE ;
        WITH FUNCTION FIFTH (POSITION : IN NATURAL) 
                            RETURN FIFTH_TYPE ;
        FIFTH_VALUE : IN NATURAL ;
        TYPE SIXTH_TYPE IS PRIVATE ;
        WITH FUNCTION SIXTH (POSITION : IN NATURAL) 
                            RETURN SIXTH_TYPE ;
        SIXTH_VALUE : IN NATURAL ;
        TYPE SEVENTH_TYPE IS PRIVATE ;
        WITH FUNCTION SEVENTH (POSITION : IN NATURAL) 
                            RETURN SEVENTH_TYPE ;
        SEVENTH_VALUE : IN NATURAL ;
        TYPE EIGHTH_TYPE IS PRIVATE ;
        WITH FUNCTION EIGHTH (POSITION : IN NATURAL) 
                            RETURN EIGHTH_TYPE ;
        EIGHTH_VALUE : IN NATURAL ;
        TYPE NINTH_TYPE IS PRIVATE ;
        WITH FUNCTION NINTH (POSITION : IN NATURAL) 
                            RETURN NINTH_TYPE ;
        NINTH_VALUE : IN NATURAL ;
        TYPE TENTH_TYPE IS PRIVATE ;
        WITH FUNCTION TENTH (POSITION : IN NATURAL) 
                            RETURN TENTH_TYPE ;
        TENTH_VALUE : IN NATURAL ;
        TYPE ELEVENTH_TYPE IS PRIVATE ;
        WITH FUNCTION ELEVENTH (POSITION : IN NATURAL) 
                            RETURN ELEVENTH_TYPE ;
        ELEVENTH_VALUE : IN NATURAL ;
        TYPE TWELFTH_TYPE IS PRIVATE ;
        WITH FUNCTION TWELFTH (POSITION : IN NATURAL) 
                            RETURN TWELFTH_TYPE ;
        TWELFTH_VALUE : IN NATURAL ;
        TYPE THIRTEENTH_TYPE IS PRIVATE ;
        WITH FUNCTION THIRTEENTH (POSITION : IN NATURAL) 
                            RETURN THIRTEENTH_TYPE ;
        THIRTEENTH_VALUE : IN NATURAL ;
        TYPE FOURTEENTH_TYPE IS PRIVATE ;
        WITH FUNCTION FOURTEENTH (POSITION : IN NATURAL) 
                            RETURN FOURTEENTH_TYPE ;
        FOURTEENTH_VALUE : IN NATURAL ;
        TYPE FIFTEENTH_TYPE IS PRIVATE ;
        WITH FUNCTION FIFTEENTH (POSITION : IN NATURAL) 
                            RETURN FIFTEENTH_TYPE ;
        FIFTEENTH_VALUE : IN NATURAL ;
        TYPE SIXTEENTH_TYPE IS PRIVATE ;
        WITH FUNCTION SIXTEENTH (POSITION : IN NATURAL) 
                            RETURN SIXTEENTH_TYPE ;
        SIXTEENTH_VALUE : IN NATURAL ;
        
    PACKAGE ORDER_PACKAGE IS
    
        A : FIRST_TYPE      := FIRST (FIRST_VALUE) ;
        B : SECOND_TYPE     := SECOND (SECOND_VALUE) ;
        C : THIRD_TYPE      := THIRD (THIRD_VALUE) ;
        D : FOURTH_TYPE     := FOURTH (FOURTH_VALUE) ;
        E : FIFTH_TYPE      := FIFTH (FIFTH_VALUE) ;
        F : SIXTH_TYPE      := SIXTH (SIXTH_VALUE) ;
        G : SEVENTH_TYPE    := SEVENTH (SEVENTH_VALUE) ;
        H : EIGHTH_TYPE     := EIGHTH (EIGHTH_VALUE) ;
        I : NINTH_TYPE      := NINTH (NINTH_VALUE) ;
        J : TENTH_TYPE      := TENTH (TENTH_VALUE) ;
        K : ELEVENTH_TYPE   := ELEVENTH (ELEVENTH_VALUE) ;
        L : TWELFTH_TYPE    := TWELFTH (TWELFTH_VALUE) ;
        M : THIRTEENTH_TYPE := THIRTEENTH (THIRTEENTH_VALUE) ;
        N : FOURTEENTH_TYPE := FOURTEENTH (FOURTEENTH_VALUE) ;
        O : FIFTEENTH_TYPE  := FIFTEENTH (FIFTEENTH_VALUE) ;
        P : SIXTEENTH_TYPE  := SIXTEENTH (SIXTEENTH_VALUE) ;
        
    END ORDER_PACKAGE ;
    

    FUNCTION BOOL IS NEW NAME (RETURN_TYPE  => BOOLEAN,
                               RETURN_VALUE => TRUE_VALUE,
                               POSITION     => 1,
                               OFFSET       => 8,
                               WHEN_ELAB    => WHEN_ELABORATED,
                               INDEX        => LIST_INDEX,
                               LIST         => LIST,
                               ORDER_LIST   => ORDER_LIST) ;
                               
    FUNCTION INT IS NEW NAME (RETURN_TYPE   => YEAR_TYPE,
                              RETURN_VALUE  => THIS_YEAR,
                              POSITION      => 2,
                              OFFSET        => 8,
                              WHEN_ELAB     => WHEN_ELABORATED,
                              INDEX         => LIST_INDEX,
                              LIST          => LIST,
                              ORDER_LIST    => ORDER_LIST) ;
                               
    FUNCTION FLOAT IS NEW NAME (RETURN_TYPE  => REAL,
                                RETURN_VALUE => REAL_VALUE,
                                POSITION     => 3,
                                OFFSET       => 8,
                                WHEN_ELAB    => WHEN_ELABORATED,
                                INDEX        => LIST_INDEX,
                                LIST         => LIST,
                                ORDER_LIST   => ORDER_LIST) ;
                               
    FUNCTION CHAR IS NEW NAME (RETURN_TYPE  => CHARACTER,
                               RETURN_VALUE => CHARACTER_VALUE,
                               POSITION     => 4,
                               OFFSET       => 8,
                               WHEN_ELAB    => WHEN_ELABORATED,
                               INDEX        => LIST_INDEX,
                               LIST         => LIST,
                               ORDER_LIST   => ORDER_LIST) ;
                               
    FUNCTION ENUM IS NEW NAME (RETURN_TYPE  => MONTH_TYPE,
                               RETURN_VALUE => THIS_MONTH,
                               POSITION     => 5,
                               OFFSET       => 8,
                               WHEN_ELAB    => WHEN_ELABORATED,
                               INDEX        => LIST_INDEX,
                               LIST         => LIST,
                               ORDER_LIST   => ORDER_LIST) ;
                               
    FUNCTION ARRY IS NEW NAME (RETURN_TYPE  => DUE_DATES,
                               RETURN_VALUE => REPORT_DATES,
                               POSITION     => 6,
                               OFFSET       => 8,
                               WHEN_ELAB    => WHEN_ELABORATED,
                               INDEX        => LIST_INDEX,
                               LIST         => LIST,
                               ORDER_LIST   => ORDER_LIST) ;
                               

    FUNCTION RCRD IS NEW NAME (RETURN_TYPE  => DATE,
                               RETURN_VALUE => TODAY,
                               POSITION     => 7,
                               OFFSET       => 8,
                               WHEN_ELAB    => WHEN_ELABORATED,
                               INDEX        => LIST_INDEX,
                               LIST         => LIST,
                               ORDER_LIST   => ORDER_LIST) ;
                               

    FUNCTION ACSS IS NEW NAME (RETURN_TYPE  => DATE_ACCESS,
                               RETURN_VALUE => FIRST_DATE,
                               POSITION     => 8,
                               OFFSET       => 8,
                               WHEN_ELAB    => WHEN_ELABORATED,
                               INDEX        => LIST_INDEX,
                               LIST         => LIST,
                               ORDER_LIST   => ORDER_LIST) ;
                               
    PACKAGE ELABORATION_ORDER IS NEW ORDER_PACKAGE
        (FIRST_TYPE            => BOOLEAN,
         FIRST                 => BOOL,
         FIRST_VALUE           => 1,
         THIRD_TYPE            => REAL,
         THIRD                 => FLOAT,
         THIRD_VALUE           => 3,
         SECOND_TYPE           => YEAR_TYPE,    -- ORDERING OF PARAMETERS
         SECOND                => INT,          -- IS DELIBERATE. 
         SECOND_VALUE          => 2,
         FOURTH_TYPE           => CHARACTER,
         FOURTH                => CHAR,
         FOURTH_VALUE          => 4,
         FIFTH_TYPE            => MONTH_TYPE,
         FIFTH                 => ENUM,
         FIFTH_VALUE           => 5,
         SIXTH_TYPE            => DUE_DATES,
         SIXTH                 => ARRY,
         SIXTH_VALUE           => 6,
         SEVENTH_TYPE          => DATE,
         SEVENTH               => RCRD,
         SEVENTH_VALUE         => 7,
         EIGHTH_TYPE           => DATE_ACCESS,
         EIGHTH                => ACSS,
         EIGHTH_VALUE          => 8,
         NINTH_TYPE            => BOOLEAN,
         NINTH                 => BOOL,
         NINTH_VALUE           => 9,
         TENTH_TYPE            => YEAR_TYPE,
         TENTH                 => INT,
         TENTH_VALUE           => 10,
         ELEVENTH_TYPE         => REAL,
         ELEVENTH              => FLOAT,
         ELEVENTH_VALUE        => 11,
         TWELFTH_TYPE          => CHARACTER,
         TWELFTH               => CHAR,
         TWELFTH_VALUE         => 12,
         THIRTEENTH_TYPE       => MONTH_TYPE,
         THIRTEENTH            => ENUM,
         THIRTEENTH_VALUE      => 13,
         FOURTEENTH_TYPE       => DUE_DATES,
         FOURTEENTH            => ARRY,
         FOURTEENTH_VALUE      => 14,
         FIFTEENTH_TYPE        => DATE,
         FIFTEENTH             => RCRD,
         FIFTEENTH_VALUE       => 15,
         SIXTEENTH_TYPE        => DATE_ACCESS,
         SIXTEENTH             => ACSS,
         SIXTEENTH_VALUE       => 16) ;

BEGIN
     REPORT.TEST("CC3016B", "CHECK THAT AN INSTANCE OF A GENERIC " &
                 "PACKAGE MUST DECLARE A PACKAGE. CHECK THAT THE " &
                 "DECLARATIVE ITEMS IN AN INSTANTIATION OF A GENERIC " &
                 "PACKAGE SPECIFICATION ARE ELABORATED IN THE ORDER " &
                 "DECLARED.");

     IF ORDER_LIST(1) /= REPORT.IDENT_INT(1) THEN
          REPORT.FAILED("BOOLEAN 1 ELABORATED OUT OF ORDER");
     END IF;

     IF ORDER_LIST(2) /= REPORT.IDENT_INT(2) THEN
          REPORT.FAILED("INTEGER TYPE 1 ELABORATED OUT OF ORDER");
     END IF;

     IF ORDER_LIST(3) /= REPORT.IDENT_INT(3) THEN
          REPORT.FAILED("REAL 1 ELABORATED OUT OF ORDER");
     END IF;

     IF ORDER_LIST(4) /= REPORT.IDENT_INT(4) THEN
          REPORT.FAILED("CHARACTER 1 ELABORATED OUT OF ORDER");
     END IF;

     IF ORDER_LIST(5) /= REPORT.IDENT_INT(5) THEN
          REPORT.FAILED("ENUMERATION 1 ELABORATED OUT OF ORDER");
     END IF;

     IF ORDER_LIST(6) /= REPORT.IDENT_INT(6) THEN
          REPORT.FAILED("ARRAY 1 ELABORATED OUT OF ORDER");
     END IF;

     IF ORDER_LIST(7) /= REPORT.IDENT_INT(7) THEN
          REPORT.FAILED("RECORD 1 ELABORATED OUT OF ORDER");
     END IF;

     IF ORDER_LIST(8) /= REPORT.IDENT_INT(8) THEN
          REPORT.FAILED("ACCESS 1 ELABORATED OUT OF ORDER");
     END IF;

     IF ORDER_LIST(9) /= REPORT.IDENT_INT(9) THEN
          REPORT.FAILED("BOOLEAN 2 ELABORATED OUT OF ORDER");
     END IF;

     IF ORDER_LIST(10) /= REPORT.IDENT_INT(10) THEN
          REPORT.FAILED("INTEGER TYPE 2 ELABORATED OUT OF ORDER");
     END IF;

     IF ORDER_LIST(11) /= REPORT.IDENT_INT(11) THEN
          REPORT.FAILED("REAL 2 ELABORATED OUT OF ORDER");
     END IF;

     IF ORDER_LIST(12) /= REPORT.IDENT_INT(12) THEN
          REPORT.FAILED("CHARACTER 2 ELABORATED OUT OF ORDER");
     END IF;

     IF ORDER_LIST(13) /= REPORT.IDENT_INT(13) THEN
          REPORT.FAILED("ENUMERATION 2 ELABORATED OUT OF ORDER");
     END IF;

     IF ORDER_LIST(14) /= REPORT.IDENT_INT(14) THEN
          REPORT.FAILED("ARRAY 2 ELABORATED OUT OF ORDER");
     END IF;

     IF ORDER_LIST(15) /= REPORT.IDENT_INT(15) THEN
          REPORT.FAILED("RECORD 2 ELABORATED OUT OF ORDER");
     END IF;

     IF ORDER_LIST(16) /= REPORT.IDENT_INT(16) THEN
          REPORT.FAILED("ACCESS 2 ELABORATED OUT OF ORDER");
     END IF;

     REPORT.RESULT ;
     
END CC3016B;