ca11001.a

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

A
277
字号
-- CA11001.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 a child unit can be used to provide an alternate view and--      operations on a private type in its parent package.  Check that a --      child unit can be a package.  Check that a WITH of a child unit --      includes an implicit WITH of its ancestor unit.  ---- TEST DESCRIPTION:--      Declare a private type in a package specification. Declare --      subprograms for the type.----      Add a public child to the above package.  Within the body of this--      package, access the private type. Declare operations to read and --      write to its parent private type.----      In the main program, "with" the child.  Declare objects of the--      parent private type.  Access the subprograms from both parent and--      child packages.------ CHANGE HISTORY:--      06 Dec 94   SAIC    ACVC 2.0----!package CA11001_0 is   -- Cartesian_Complex--  This package represents a Cartesian view of a complex number.  It contains --  a private type plus subprograms to construct and decompose a complex --  number.   type Complex_Int is range 0 .. 100;   type Complex_Type is private;   Constant_Complex : constant Complex_Type;   Complex_Error : exception;   procedure Cartesian_Assign   (R, I : in     Complex_Int;                                  C    :    out Complex_Type);   function Cartesian_Real_Part (C : Complex_Type)      return Complex_Int;   function Cartesian_Imag_Part (C : Complex_Type)      return Complex_Int;   function Complex (Real, Imaginary : Complex_Int)     return Complex_Type;                             private   type Complex_Type is                      -- Parent private type      record         Real, Imaginary : Complex_Int;      end record;   Constant_Complex : constant Complex_Type := (Real => 0, Imaginary => 0);end CA11001_0;       -- Cartesian_Complex--=======================================================================--package body CA11001_0 is  -- Cartesian_Complex   procedure Cartesian_Assign (R, I : in     Complex_Int;                                C    :    out Complex_Type) is   begin      C.Real      := R;      C.Imaginary := I;   end Cartesian_Assign;   -------------------------------------------------------------   function Cartesian_Real_Part (C : Complex_Type)      return Complex_Int is   begin      return C.Real;   end Cartesian_Real_Part;   -------------------------------------------------------------   function Cartesian_Imag_Part (C : Complex_Type)      return Complex_Int is   begin      return C.Imaginary;   end Cartesian_Imag_Part;   -------------------------------------------------------------   function Complex (Real, Imaginary : Complex_Int)     return Complex_Type is   begin      return (Real, Imaginary);   end Complex;end CA11001_0;      -- Cartesian_Complex--=======================================================================--package CA11001_0.CA11001_1 is    -- Polar_Complex--  This public child provides a different view of the private type from its--  parent.  It provides a polar view by the provision of subprograms which--  construct and decompose a complex number.   procedure Polar_Assign (R, Theta : in     Complex_Int;                            C        :    out Complex_Type);                                               -- Complex_Type is a                                              -- record of CA11001_0   function Polar_Real_Part (C: Complex_Type) return Complex_Int;              function Polar_Imag_Part (C: Complex_Type) return Complex_Int;   function Equals_Const (Num : Complex_Type) return Boolean;end CA11001_0.CA11001_1;    -- Polar_Complex--=======================================================================--package body CA11001_0.CA11001_1 is   -- Polar_Complex   function Cos (Angle : Complex_Int) return Complex_Int is      Num : constant Complex_Int := 2;   begin      return (Angle * Num);   -- not true Cosine function   end Cos;   -------------------------------------------------------------   function Sine (Angle : Complex_Int) return Complex_Int is   begin      return 1;     -- not true Sine function   end Sine;   -------------------------------------------------------------   function Sqrt (Num : Complex_Int)      return Complex_Int is   begin     return (Num);     -- not true Square root function   end Sqrt;   -------------------------------------------------------------   function Tan  (Angle : Complex_Int) return Complex_Int is   begin     return Angle;     -- not true Tangent function   end Tan;   -------------------------------------------------------------   procedure Polar_Assign (R, Theta : in     Complex_Int;                             C        :    out Complex_Type) is    begin      if R = 0 and Theta = 0 then         raise Complex_Error;      end if;      C.Real := R * Cos (Theta);      C.Imaginary := R * Sine (Theta);   end Polar_Assign;   -------------------------------------------------------------   function Polar_Real_Part (C: Complex_Type) return Complex_Int is   begin      return Sqrt ((Cartesian_Imag_Part (C)) ** 2 +                    (Cartesian_Real_Part (C)) ** 2);   end Polar_Real_Part;   -------------------------------------------------------------   function Polar_Imag_Part (C: Complex_Type) return Complex_Int is   begin      return (Tan (Cartesian_Imag_Part (C) /               Cartesian_Real_Part (C)));   end Polar_Imag_Part;   -------------------------------------------------------------   function Equals_Const (Num : Complex_Type) return Boolean is   begin      return Num.Real = Constant_Complex.Real and         Num.Imaginary = Constant_Complex.Imaginary;   end Equals_Const;end CA11001_0.CA11001_1;     -- Polar_Complex--=======================================================================--with CA11001_0.CA11001_1;        -- Polar_Complexwith Report;procedure CA11001 is   Complex_No  : CA11001_0.Complex_Type;    -- Complex_Type is a                                            -- record of CA11001_0   Complex_5x2 : CA11001_0.Complex_Type := CA11001_0.Complex (5, 2);   Int_2       :  CA11001_0.Complex_Int                := CA11001_0.Complex_Int (Report.Ident_Int (2));begin   Report.Test ("CA11001", "Check that a child unit can be used " &                "to provide an alternate view and operations " &                "on a private type in its parent package");   Basic_View_Subtest:   begin      -- Assign using Cartesian coordinates.      CA11001_0.Cartesian_Assign         (CA11001_0.Complex_Int (Report.Ident_Int (1)), Int_2, Complex_No);      -- Read back in Polar coordinates.      -- Polar values are surrogates used in checking for correct      -- subprogram calls.      if CA11001_0."/=" (CA11001_0.CA11001_1.Polar_Real_Part (Complex_No),        CA11001_0.Cartesian_Real_Part (Complex_5x2)) and CA11001_0."/="          (CA11001_0.CA11001_1.Polar_Imag_Part (Complex_No),              CA11001_0.Cartesian_Imag_Part (Complex_5x2)) then           Report.Failed ("Incorrect Cartesian result");      end if;   end Basic_View_Subtest;   -------------------------------------------------------------   Alternate_View_Subtest:   begin      -- Assign using Polar coordinates.      CA11001_0.CA11001_1.Polar_Assign         (Int_2, CA11001_0.Complex_Int (Report.Ident_Int (3)), Complex_No);      -- Read back in Cartesian coordinates.      if CA11001_0."/=" (CA11001_0.Cartesian_Real_Part         (Complex_No), CA11001_0.Complex_Int (Report.Ident_Int (12))) or           CA11001_0."/=" (CA11001_0.Cartesian_Imag_Part (Complex_No), Int_2)       then         Report.Failed ("Incorrect Polar result");      end if;   end Alternate_View_Subtest;   -------------------------------------------------------------   Other_Subtest:   begin      -- Assign using Polar coordinates.      CA11001_0.CA11001_1.Polar_Assign         (CA11001_0.Complex_Int (Report.Ident_Int (0)), Int_2, Complex_No);      -- Compare with Complex_Num in CA11001_0.      if not CA11001_0.CA11001_1.Equals_Const (Complex_No)        then         Report.Failed ("Incorrect result");      end if;   end Other_Subtest;   -------------------------------------------------------------   Exception_Subtest:   begin      -- Raised parent's exception.      CA11001_0.CA11001_1.Polar_Assign         (CA11001_0.Complex_Int (Report.Ident_Int (0)),            CA11001_0.Complex_Int (Report.Ident_Int (0)), Complex_No);      Report.Failed ("Exception was not raised");   exception      when CA11001_0.Complex_Error =>          null;      when others                  =>         Report.Failed ("Unexpected exception raised in test");   end Exception_Subtest;   Report.Result;end CA11001;

⌨️ 快捷键说明

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