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 + -
显示快捷键?