URL
https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk
Subversion Repositories openrisc_me
[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [gcc/] [testsuite/] [ada/] [acats/] [tests/] [c3/] [c3a0008.a] - Rev 294
Compare with Previous | Blame | View Log
-- 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 isTC_Log_Call : Boolean := False;TC_Cos_Call : Boolean := False;TC_Sine_Call : Boolean := False;-- Type accesses to functions Log, Sine, or Costype 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 isfunction Log (Angle : in Float) return Float isbeginTC_Log_Call := True;return 0.1;end Log;function Sine (Angle : in Float) return Float isbeginTC_Sine_Call := True;return 0.0;end Sine;function Cos (Angle : in Float) return Float isbeginTC_Cos_Call := True;return 1.0;end Cos;function Integrate (Func : Integrand_Ptr; From, To: Float)return Float isTheta : Float;begin-- calls the actual subprogram passed as parameterTheta := Func (From) + Func (To);return Theta;end Integrate;end Integrate_Lookup;-----------------------------------------------------------------------------with Report;with Integrate_Lookup;procedure C3A0008 isArea : Float := 0.0;beginReport.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 thenReport.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 thenReport.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 thenReport.Failed ("Incorrect Cos result");end if;Report.Result;end C3A0008;
