-- CE3306A.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.
--*
-- OBJECTIVE:
--     CHECK THAT CONSTRAINT_ERROR IS RAISED IF THE VALUE OF 'TO' IS
--     NEGATIVE OR GREATER THAN COUNT'LAST WHEN COUNT'LAST IS LESS THAN
--     COUNT'BASE'LAST.

-- HISTORY:
--     JET 08/17/88  CREATED ORIGINAL TEST.
--     PWN 10/27/95  REMOVED CONSTRAINT CHECK THAT NOW HAPPENS AT
--                   COMPILE TIME.

WITH REPORT; USE REPORT;
WITH TEXT_IO; USE TEXT_IO;
PROCEDURE CE3306A IS

BEGIN
     TEST ("CE3306A", "CHECK THAT CONSTRAINT_ERROR IS RAISED IF THE " &
                      "VALUE OF 'TO' IS NEGATIVE OR GREATER THAN " &
                      "COUNT'LAST WHEN COUNT'LAST IS LESS THAN " &
                      "COUNT'BASE'LAST");

     BEGIN
          SET_LINE_LENGTH(-1);
          FAILED("NO EXCEPTION FOR SET_LINE_LENGTH(-1)");
     EXCEPTION
          WHEN CONSTRAINT_ERROR =>
               NULL;
          WHEN OTHERS =>
               FAILED("UNEXPECTED EXCEPTION FOR SET_LINE_LENGTH(-1)");
     END;

     BEGIN
          SET_PAGE_LENGTH(COUNT(IDENT_INT(-1)));
          FAILED("NO EXCEPTION FOR SET_PAGE_LENGTH(-1)");
     EXCEPTION
          WHEN CONSTRAINT_ERROR =>
               NULL;
          WHEN OTHERS =>
               FAILED("UNEXPECTED EXCEPTION FOR SET_PAGE_LENGTH(-1)");
     END;

     IF COUNT'LAST < COUNT'BASE'LAST THEN
          BEGIN
               SET_LINE_LENGTH(COUNT'LAST + COUNT(IDENT_INT(1)));
               FAILED("NO EXCEPTION FOR SET_LINE_LENGTH(COUNT'LAST+1)");
          EXCEPTION
               WHEN CONSTRAINT_ERROR =>
                    NULL;
               WHEN OTHERS =>
                    FAILED("UNEXPECTED EXCEPTION FOR SET_LINE_LENGTH" &
                           "(COUNT'LAST+1)");
          END;

     ELSE
          COMMENT("COUNT'LAST IS EQUAL TO COUNT'BASE'LAST");
     END IF;

     RESULT;
END CE3306A;
