OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gcc-4.2.2/] [gcc/] [testsuite/] [ada/] [acats/] [tests/] [ca/] [ca11017.a] - Diff between revs 149 and 154

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 149 Rev 154
-- CA11017.A
-- CA11017.A
--
--
--                             Grant of Unlimited Rights
--                             Grant of Unlimited Rights
--
--
--     Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
--     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
--     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 in the software and documentation contained herein.
--     Unlimited rights are defined in DFAR 252.227-7013(a)(19).  By making
--     Unlimited rights are defined in DFAR 252.227-7013(a)(19).  By making
--     this public release, the Government intends to confer upon all
--     this public release, the Government intends to confer upon all
--     recipients unlimited rights  equal to those held by the Government.
--     recipients unlimited rights  equal to those held by the Government.
--     These rights include rights to use, duplicate, release or disclose the
--     These rights include rights to use, duplicate, release or disclose the
--     released technical data and computer software in whole or in part, in
--     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
--     any manner and for any purpose whatsoever, and to have or permit others
--     to do so.
--     to do so.
--
--
--                                    DISCLAIMER
--                                    DISCLAIMER
--
--
--     ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
--     ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
--     DISCLOSED ARE AS IS.  THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED
--     DISCLOSED ARE AS IS.  THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED
--     WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
--     WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
--     SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE
--     SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE
--     OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
--     OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
--     PARTICULAR PURPOSE OF SAID MATERIAL.
--     PARTICULAR PURPOSE OF SAID MATERIAL.
--*
--*
--
--
-- OBJECTIVE:
-- OBJECTIVE:
--      Check that body of the parent package may depend on one of its own
--      Check that body of the parent package may depend on one of its own
--      public children.
--      public children.
--
--
-- TEST DESCRIPTION:
-- TEST DESCRIPTION:
--      A scenario is created that demonstrates the potential of adding a
--      A scenario is created that demonstrates the potential of adding a
--      public child during code maintenance without distubing a large
--      public child during code maintenance without distubing a large
--      subsystem.  After child is added to the subsystem, a maintainer
--      subsystem.  After child is added to the subsystem, a maintainer
--      decides to take advantage of the new functionality and rewrites
--      decides to take advantage of the new functionality and rewrites
--      the parent's body.
--      the parent's body.
--
--
--      Declare a string abstraction in a package which manipulates string
--      Declare a string abstraction in a package which manipulates string
--      replacement. Define a parent package which provides operations for
--      replacement. Define a parent package which provides operations for
--      a record type with discriminant.  Declare a public child of this
--      a record type with discriminant.  Declare a public child of this
--      package which adds functionality to the original subsystem.  In the
--      package which adds functionality to the original subsystem.  In the
--      parent body, call operations from the public child.
--      parent body, call operations from the public child.
--
--
--      In the main program, check that operations in the parent and public
--      In the main program, check that operations in the parent and public
--      child perform as expected.
--      child perform as expected.
--
--
--
--
-- CHANGE HISTORY:
-- CHANGE HISTORY:
--      06 Dec 94   SAIC    ACVC 2.0
--      06 Dec 94   SAIC    ACVC 2.0
--
--
--!
--!
-- Simulates application which manipulates strings.
-- Simulates application which manipulates strings.
package CA11017_0 is
package CA11017_0 is
   type String_Rec (The_Size : positive) is private;
   type String_Rec (The_Size : positive) is private;
   type Substring is new string;
   type Substring is new string;
   -- ... Various other types used by the application.
   -- ... Various other types used by the application.
   procedure Replace (In_The_String   : in out String_Rec;
   procedure Replace (In_The_String   : in out String_Rec;
                      At_The_Position : in     positive;
                      At_The_Position : in     positive;
                      With_The_String : in     String_Rec);
                      With_The_String : in     String_Rec);
   -- ... Various other operations used by the application.
   -- ... Various other operations used by the application.
private
private
   -- Different size for each individual record.
   -- Different size for each individual record.
   type String_Rec (The_Size : positive) is
   type String_Rec (The_Size : positive) is
      record
      record
         The_Length  : natural := 0;
         The_Length  : natural := 0;
         The_Content : Substring (1 .. The_Size);
         The_Content : Substring (1 .. The_Size);
      end record;
      end record;
end CA11017_0;
end CA11017_0;
     --=================================================================--
     --=================================================================--
-- Public child added during code maintenance without disturbing a
-- Public child added during code maintenance without disturbing a
-- large system.  This public child would add functionality to the
-- large system.  This public child would add functionality to the
-- original system.
-- original system.
package CA11017_0.CA11017_1 is
package CA11017_0.CA11017_1 is
   Position_Error : exception;
   Position_Error : exception;
   function Equal_Length (Left  : in String_Rec;
   function Equal_Length (Left  : in String_Rec;
                          Right : in String_Rec) return boolean;
                          Right : in String_Rec) return boolean;
   function Same_Content (Left  : in String_Rec;
   function Same_Content (Left  : in String_Rec;
                          Right : in String_Rec) return boolean;
                          Right : in String_Rec) return boolean;
   procedure Copy (From_The_Substring : in     Substring;
   procedure Copy (From_The_Substring : in     Substring;
                   To_The_String      : in out String_Rec);
                   To_The_String      : in out String_Rec);
   -- ... Various other operations used by the application.
   -- ... Various other operations used by the application.
end CA11017_0.CA11017_1;
end CA11017_0.CA11017_1;
     --=================================================================--
     --=================================================================--
package body CA11017_0.CA11017_1 is
package body CA11017_0.CA11017_1 is
   function Equal_Length (Left  : in String_Rec;
   function Equal_Length (Left  : in String_Rec;
                          Right : in String_Rec) return boolean is
                          Right : in String_Rec) return boolean is
   -- Quick comparison between the lengths of the input strings.
   -- Quick comparison between the lengths of the input strings.
   begin
   begin
      return (Left.The_Length = Right.The_Length);  -- Parent's private
      return (Left.The_Length = Right.The_Length);  -- Parent's private
                                                    -- type.
                                                    -- type.
   end Equal_Length;
   end Equal_Length;
   --------------------------------------------------------------------
   --------------------------------------------------------------------
   function Same_Content (Left  : in String_Rec;
   function Same_Content (Left  : in String_Rec;
                          Right : in String_Rec) return boolean is
                          Right : in String_Rec) return boolean is
   begin
   begin
      for I in 1 .. Left.The_Length loop
      for I in 1 .. Left.The_Length loop
         if Left.The_Content (I) = Right.The_Content (I) then
         if Left.The_Content (I) = Right.The_Content (I) then
            return true;
            return true;
         else
         else
            return false;
            return false;
         end if;
         end if;
      end loop;
      end loop;
   end Same_Content;
   end Same_Content;
   --------------------------------------------------------------------
   --------------------------------------------------------------------
   procedure Copy (From_The_Substring : in     Substring;
   procedure Copy (From_The_Substring : in     Substring;
                   To_The_String      : in out String_Rec) is
                   To_The_String      : in out String_Rec) is
   begin
   begin
      To_The_String.The_Content        -- Parent's private type.
      To_The_String.The_Content        -- Parent's private type.
        (1 .. From_The_Substring'length) := From_The_Substring;
        (1 .. From_The_Substring'length) := From_The_Substring;
      To_The_String.The_Length         -- Parent's private type.
      To_The_String.The_Length         -- Parent's private type.
                                         := From_The_Substring'length;
                                         := From_The_Substring'length;
   end Copy;
   end Copy;
end CA11017_0.CA11017_1;
end CA11017_0.CA11017_1;
     --=================================================================--
     --=================================================================--
--  After child is added to the subsystem, a maintainer decides
--  After child is added to the subsystem, a maintainer decides
--  to take advantage of the new functionality and rewrites the
--  to take advantage of the new functionality and rewrites the
--  parent's body.
--  parent's body.
with CA11017_0.CA11017_1;
with CA11017_0.CA11017_1;
package body CA11017_0 is
package body CA11017_0 is
   -- Calls functions from public child for a quick comparison of the
   -- Calls functions from public child for a quick comparison of the
   -- input strings.  If their lengths are the same, do the replacement.
   -- input strings.  If their lengths are the same, do the replacement.
   procedure Replace (In_The_String   : in out String_Rec;
   procedure Replace (In_The_String   : in out String_Rec;
                      At_The_Position : in     positive;
                      At_The_Position : in     positive;
                      With_The_String : in     String_Rec) is
                      With_The_String : in     String_Rec) is
      End_Position : natural := At_The_Position +
      End_Position : natural := At_The_Position +
                                With_The_String.The_Length - 1;
                                With_The_String.The_Length - 1;
   begin
   begin
      if not CA11017_0.CA11017_1.Equal_Length  -- Public child's operation.
      if not CA11017_0.CA11017_1.Equal_Length  -- Public child's operation.
        (With_The_String, In_The_String) then
        (With_The_String, In_The_String) then
           raise CA11017_0.CA11017_1.Position_Error;
           raise CA11017_0.CA11017_1.Position_Error;
                                               -- Public child's exception.
                                               -- Public child's exception.
      else
      else
         In_The_String.The_Content (At_The_Position .. End_Position) :=
         In_The_String.The_Content (At_The_Position .. End_Position) :=
           With_The_String.The_Content (1 .. With_The_String.The_Length);
           With_The_String.The_Content (1 .. With_The_String.The_Length);
      end if;
      end if;
   end Replace;
   end Replace;
end CA11017_0;
end CA11017_0;
     --=================================================================--
     --=================================================================--
with Report;
with Report;
with CA11017_0.CA11017_1;   -- Explicit with public child package,
with CA11017_0.CA11017_1;   -- Explicit with public child package,
                            -- implicit with parent package (CA11017_0).
                            -- implicit with parent package (CA11017_0).
procedure CA11017 is
procedure CA11017 is
   package String_Pkg renames CA11017_0;
   package String_Pkg renames CA11017_0;
   use String_Pkg;
   use String_Pkg;
begin
begin
   Report.Test ("CA11017", "Check that body of the parent package can " &
   Report.Test ("CA11017", "Check that body of the parent package can " &
                "depend on one of its own public children");
                "depend on one of its own public children");
-- Both input strings have the same size. Replace the first string by the
-- Both input strings have the same size. Replace the first string by the
-- second string.
-- second string.
        Replace_Subtest:
        Replace_Subtest:
        declare
        declare
           The_First_String, The_Second_String : String_Rec (16);
           The_First_String, The_Second_String : String_Rec (16);
                                                 -- Parent's private type.
                                                 -- Parent's private type.
           The_Position                        : positive := 1;
           The_Position                        : positive := 1;
        begin
        begin
           CA11017_1.Copy ("This is the time",
           CA11017_1.Copy ("This is the time",
                           To_The_String => The_First_String);
                           To_The_String => The_First_String);
           CA11017_1.Copy ("For all good men", The_Second_String);
           CA11017_1.Copy ("For all good men", The_Second_String);
           Replace (The_First_String, The_Position, The_Second_String);
           Replace (The_First_String, The_Position, The_Second_String);
           -- Compare results using function from public child since
           -- Compare results using function from public child since
           -- the type is private.
           -- the type is private.
           if not CA11017_1.Same_Content
           if not CA11017_1.Same_Content
                            (The_First_String, The_Second_String) then
                            (The_First_String, The_Second_String) then
              Report.Failed ("Incorrect results");
              Report.Failed ("Incorrect results");
           end if;
           end if;
        end Replace_Subtest;
        end Replace_Subtest;
-- During processing, the application may erroneously attempt to replace
-- During processing, the application may erroneously attempt to replace
-- strings of different size. This would result in the raising of an
-- strings of different size. This would result in the raising of an
-- exception.
-- exception.
        Exception_Subtest:
        Exception_Subtest:
        declare
        declare
           The_First_String  : String_Rec (17);
           The_First_String  : String_Rec (17);
                                                 -- Parent's private type.
                                                 -- Parent's private type.
           The_Second_String : String_Rec (13);
           The_Second_String : String_Rec (13);
                                                 -- Parent's private type.
                                                 -- Parent's private type.
           The_Position      : positive := 2;
           The_Position      : positive := 2;
        begin
        begin
           CA11017_1.Copy (" ACVC Version 2.0", The_First_String);
           CA11017_1.Copy (" ACVC Version 2.0", The_First_String);
           CA11017_1.Copy (From_The_Substring => "ACVC 9X Basic",
           CA11017_1.Copy (From_The_Substring => "ACVC 9X Basic",
                           To_The_String      => The_Second_String);
                           To_The_String      => The_Second_String);
           Replace (The_First_String, The_Position, The_Second_String);
           Replace (The_First_String, The_Position, The_Second_String);
           Report.Failed ("Exception was not raised");
           Report.Failed ("Exception was not raised");
        exception
        exception
           when CA11017_1.Position_Error =>
           when CA11017_1.Position_Error =>
                  Report.Comment ("Exception is raised as expected");
                  Report.Comment ("Exception is raised as expected");
        end Exception_Subtest;
        end Exception_Subtest;
   Report.Result;
   Report.Result;
end CA11017;
end CA11017;
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.