ca11018.a

来自「linux下编程用 编译软件」· A 代码 · 共 367 行

A
367
字号
-- CA11018.A----                             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 body of the parent package may depend on one of its own --      public generic children.---- TEST DESCRIPTION:--      A scenario is created that demonstrates the potential of adding a--      public generic child during code maintenance without distubing a large --      subsystem.  After child is added to the subsystem, a maintainer--      decides to take advantage of the new functionality and rewrites--      the parent's body.----      Declare a message application in a package which highlights some--      key words.  Declare a public generic child of this package which adds --      functionality to the original subsystem.  In the parent body, --      instantiate the child.----      In the main program, check that the operations in the parent, --      and instances of the public child package perform as expected.  ------ CHANGE HISTORY:--      06 Dec 94   SAIC    ACVC 2.0--      14 Dec 94   SAIC    Modified Copy_Particularly_Designated_Pkg inst.--      17 Nov 95   SAIC    Update and repair for ACVC 2.0.1----!  -- Simulates application which displays messages.package CA11018_0 is                  type Designated_Num is new Integer range 0 .. 100;   type Particularly_Designated_Num is new Integer range 0 .. 100;   type Message is new String;   type Message_Rec is tagged private;   type Designated_Msg is new Message_Rec with private;   type Particularly_Designated_Msg is new Message_Rec with private;   -- Analyzes message for presence of word in the secret message. If found,    -- word is highlighted.   procedure Highlight_Designated (The_Word       : in     Message;                                   In_The_Message : in out Designated_Msg);                                  -- Analyzes message for presence of word in the secret message. If found,    -- word is highlighted and do other actions.   procedure Highlight_Particularly_Designated      (The_Word       : in     Message;      In_The_Message : in out Particularly_Designated_Msg);    -- Begin test code declarations: -----------------------   TC_Designated_Not_Zero : Boolean := false;   TC_Particularly_Designated_Not_Zero : Boolean := false;   -- The following two functions are used to check for function   -- calls from the public generic child.   function TC_Designated_Success return Boolean;   function TC_Particularly_Designated_Success return Boolean;   -- End test code declarations. -------------------------private   type Message_Rec is tagged      record         The_Length  : natural := 0;         The_Content : Message (1 .. 60);      end record;   type Designated_Msg is new Message_Rec with null record;   -- ... More components in real application.   type Particularly_Designated_Msg is new Message_Rec with null record;   -- ... More components in real application.end CA11018_0;     --=================================================================---- Public generic child package of message display application.  Imagine that -- messages of one security level are associated with a type derived from -- integer.  For overall system security, messages of a different security-- level are associated with a different type derived from integer.  By -- instantiating this package for each security level, the results of Count -- applied to one kind of message cannot inadvertently be compared with the -- results applied to a different kind.generic   type Msg_Type is new Message_Rec with private;                                               -- Derived from parent's type.   type Count is range <>;package CA11018_0.CA11018_1 is       TC_Function_Called : Boolean := false;   function Find_Word (Wrd : in Message;                       Msg : in Msg_Type) return Count;end CA11018_0.CA11018_1;     --=================================================================--package body CA11018_0.CA11018_1 is       function Find_Word (Wrd : in Message;                       Msg : in Msg_Type) return Count is      Num  : Count   := Count'first;   -- Count how many time the word appears within the given message.   begin      -- ... Error-checking code omitted for brevity.      for I in 1 .. (Msg.The_Length - Wrd'length + 1) loop                                                 -- Parent's private type         if Msg.The_Content (I .. I + Wrd'length - 1) = Wrd                                                 -- Parent's private type           then              Num := Num + 1;         end if;      end loop;      TC_Function_Called := true;      return (Num);   end Find_Word;end CA11018_0.CA11018_1;     --=================================================================--with CA11018_0.CA11018_1;   -- Public generic child.pragma Elaborate (CA11018_0.CA11018_1);package body CA11018_0 is   ----------------------------------------------------   -- Parent's body depends on public generic child. --   ----------------------------------------------------   -- Instantiate the public child for the secret message.   package Designated_Pkg is new CA11018_0.CA11018_1      (Msg_Type => Designated_Msg, Count => Designated_Num);   -- Instantiate the public child for the top secret message.   package Particularly_Designated_Pkg is new CA11018_0.CA11018_1      (Particularly_Designated_Msg, Particularly_Designated_Num);   -- End instantiations. -----------------------------      function TC_Designated_Success return Boolean is   -- Check to see if the function in the public generic child is called.   begin      return Designated_Pkg.TC_Function_Called;   end TC_Designated_Success;   --------------------------------------------------------------   function TC_Particularly_Designated_Success return Boolean is   -- Check to see if the function in the public generic child is called.   begin      return Particularly_Designated_Pkg.TC_Function_Called;   end TC_Particularly_Designated_Success;   --------------------------------------------------------------   -- Calls functions from public child to search for a key word.     -- If the word appears more than once in each message,    -- highlight all of them.   procedure Highlight_Designated (The_Word       : in     Message;                                   In_The_Message : in out Designated_Msg) is   -- Not a real highlight procedure.  Real application can use graphic   -- device to highlight all occurrences of words.   begin      --------------------------------------------------------------      -- Parent's body uses function from instantiation of public --      -- generic child.                                           --      --------------------------------------------------------------      if Designated_Pkg.Find_Word          -- Child's operation.           (The_Word, In_The_Message) > 0 then          -- Highlight all occurrences in lavender.          TC_Designated_Not_Zero := true;             end if;   end Highlight_Designated;   --------------------------------------------------------------   procedure Highlight_Particularly_Designated      (The_Word       : in     Message;      In_The_Message : in out Particularly_Designated_Msg) is   -- Not a real highlight procedure.  Real application can use graphic   -- device to highlight all occurrences of words.   begin      --------------------------------------------------------------      -- Parent's body uses function from instantiation of public --      -- generic child.                                           --      --------------------------------------------------------------      if Particularly_Designated_Pkg.Find_Word     -- Child's operation.           (The_Word, In_The_Message) > 0 then          -- Highlight all occurrences in chartreuse.          -- Do other more secret stuff.          TC_Particularly_Designated_Not_Zero := true;             end if;   end Highlight_Particularly_Designated;end CA11018_0;     --=================================================================---- Public generic child to copy words to the messages.generic   type Message_Type is new Message_Rec with private;                         -- Derived from parent's type.package CA11018_0.CA11018_2 is       procedure Copy (From_The_Word  : in     Message;                   To_The_Message : in out Message_Type);end CA11018_0.CA11018_2;     --=================================================================--package body CA11018_0.CA11018_2 is       procedure Copy (From_The_Word  : in     Message;                   To_The_Message : in out Message_Type) is   -- Copy words to the appropriate messages.   begin      To_The_Message.The_Content        -- Parent's private type.        (1 .. From_The_Word'length) := From_The_Word;      To_The_Message.The_Length         -- Parent's private type.                                    := From_The_Word'length;   end Copy;end CA11018_0.CA11018_2;     --=================================================================--with Report;with CA11018_0.CA11018_2;   -- Public generic child package, copy words                            -- to the message.                            -- Implicit with parent package (CA11018_0).procedure CA11018 is   package Message_Pkg renames CA11018_0;begin   Report.Test ("CA11018", "Check that body of the parent package can " &                "depend on one of its own public generic children");-- Highlight the word "Alert" from the secret message.        Designated_Subtest:       declare          The_Message : Message_Pkg.Designated_Msg;  -- Parent's private type.          -- Instantiate the public child to copy words to the secret message.          package Copy_Designated_Pkg is new CA11018_0.CA11018_2             (Message_Pkg.Designated_Msg);       begin          Copy_Designated_Pkg.Copy ("Alert Level 1 : Alert The Guard",                                 To_The_Message => The_Message);          Message_Pkg.Highlight_Designated ("Alert", The_Message);          if not Message_Pkg.TC_Designated_Not_Zero and             Message_Pkg.TC_Designated_Success then               Report.Failed ("Alert should have been highlighted");          end if;       end Designated_Subtest;-- Highlight the word "Push The Alarm" from the top secret message.       Particularly_Designated_Subtest:       declare          The_Message : Message_Pkg.Particularly_Designated_Msg ;                                           -- Parent's private type.          -- Instantiate the public child to copy words to the top secret          -- message.          package Copy_Particularly_Designated_Pkg is new             CA11018_0.CA11018_2 (Message_Pkg.Particularly_Designated_Msg);       begin          Copy_Particularly_Designated_Pkg.Copy             ("Alert Level 10 : Alert The Guard and Push The Alarm",              The_Message);          Message_Pkg.Highlight_Particularly_Designated             ("Push The Alarm", The_Message);          if not Message_Pkg.TC_Particularly_Designated_Not_Zero and             Message_Pkg.TC_Particularly_Designated_Success then               Report.Failed ("Key words should have been highlighted");          end if;       end Particularly_Designated_Subtest;   Report.Result;end CA11018;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?