c3a0008.a

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

A
151
字号
-- C3A0008.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 subprogram references may be passed as parameters using --      access-to-subprogram types. Check that the passed subprograms may --      be invoked from within the called subprogram.---- TEST DESCRIPTION:--      Declare an access to function type in a package specification.  --      Declare three different trig functions that can be referred to by --      the access to function type.  ----      In the main program, call each function indirectly by passing the --      access to subprogram value as parameter.------ CHANGE HISTORY:--      06 Dec 94   SAIC    ACVC 2.0----!package Integrate_Lookup is  TC_Log_Call  : Boolean := False;  TC_Cos_Call  : Boolean := False;  TC_Sine_Call : Boolean := False;  -- Type accesses to functions Log, Sine, or Cos  type Integrand_Ptr is access function             (Angle : Float) return Float;  function Log  (Angle : in Float) return Float;          function Sine (Angle : in Float) return Float;           function Cos  (Angle : in Float) return Float;          function Integrate  (Func : Integrand_Ptr; From, To: Float)     return Float;end Integrate_Lookup;-----------------------------------------------------------------------------package body Integrate_Lookup is  function Log (Angle : in Float) return Float is  begin     TC_Log_Call := True;     return 0.1;  end Log;  function Sine (Angle : in Float) return Float is  begin     TC_Sine_Call := True;     return 0.0;  end Sine;  function Cos  (Angle : in Float) return Float is  begin     TC_Cos_Call := True;     return 1.0;  end Cos;  function Integrate (Func : Integrand_Ptr; From, To: Float)     return Float is     Theta : Float;  begin     -- calls the actual subprogram passed as parameter     Theta := Func (From) + Func (To);     return Theta;  end Integrate;end Integrate_Lookup;-----------------------------------------------------------------------------with Report;with Integrate_Lookup; procedure C3A0008 is  Area : Float := 0.0;begin  Report.Test ("C3A0008", "Check that subprogram references may be passed "                        & "as parameters using access-to-subprogram types. "                        & "Check that the passed subprograms may be invoked "                        & "from within the called subprogram");  Area := Integrate_Lookup.Integrate            (Integrate_Lookup.Log'Access, 1.0, 2.0);  If not Integrate_Lookup.TC_Log_Call or Area /= 0.2 then     Report.Failed ("Incorrect Log result");  end if;  Area := Integrate_Lookup.Integrate            (Integrate_Lookup.Sine'Access, 1.0, 2.0);  If not Integrate_Lookup.TC_Sine_Call or Area /= 0.0 then     Report.Failed ("Incorrect Sine result");  end if;  Area := Integrate_Lookup.Integrate            (Integrate_Lookup.Cos'Access, 1.0, 2.0);  If not Integrate_Lookup.TC_Cos_Call or Area /= 2.0 then     Report.Failed ("Incorrect Cos result");  end if;  Report.Result;end C3A0008;

⌨️ 快捷键说明

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