c3a0013.a
来自「linux下编程用 编译软件」· A 代码 · 共 348 行
A
348 行
-- C3A0013.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 general access type object may reference allocated-- pool objects as well as aliased objects. (3,4)-- Check that formal parameters of tagged types are implicitly-- defined as aliased; check that the 'Access of these formal-- parameters designates the correct object with the correct-- tag. (5)-- Check that the current instance of a limited type is defined as-- aliased. (5)---- TEST DESCRIPTION:-- This test takes from the hierarchy defined in C390003; making-- the root type Vehicle limited private. It also shifts the-- abstraction to include the notion of a transmission, an object-- which is contained within any vehicle. Using an access-- discriminant, any subprogram which operates on a transmission-- may also reference the vehicle in which it is installed.---- Class Hierarchy:-- Vehicle Transmission-- / \-- Truck Car---- Contains:-- Vehicle( Transmission )-------- CHANGE HISTORY:-- 06 Dec 94 SAIC ACVC 2.0-- 16 Dec 94 SAIC Fixed accessibility problems----!package C3A0013_1 is type Vehicle is tagged limited private; type Vehicle_ID is access all Vehicle'Class; -- Constructors procedure Create ( It : in out Vehicle; Wheels : Natural := 4 ); -- Modifiers procedure Accelerate ( It : in out Vehicle ); procedure Decelerate ( It : in out Vehicle ); procedure Up_Shift ( It : in out Vehicle ); procedure Stop ( It : in out Vehicle ); -- Selectors function Speed ( It : Vehicle ) return Natural; function Wheels ( It : Vehicle ) return Natural; function Gear_Factor( It : Vehicle ) return Natural; -- TC_Ops procedure TC_Validate( It : in out Vehicle; Speed_Trap : Natural ); -- dispatching procedure used to check tag correctness procedure TC_Validate( It : Vehicle; TC_ID : Character);private type Transmission(Within: access Vehicle'Class) is limited record Engaged : Boolean := False; Gear : Integer range -1..5 := 0; end record; -- Current instance of a limited type is defined as aliased type Vehicle is tagged limited record Wheels: Natural; Speed : Natural; Power_Train: Transmission( Vehicle'Access ); end record;end C3A0013_1;with C3A0013_1;package C3A0013_2 is type Car is new C3A0013_1.Vehicle with private; procedure TC_Validate( It : Car; TC_ID : Character); function Gear_Factor( It : Car ) return Natural;private type Car is new C3A0013_1.Vehicle with record Displacement : Natural; end record;end C3A0013_2;with C3A0013_1;package C3A0013_3 is type Truck is new C3A0013_1.Vehicle with private; procedure TC_Validate( It : Truck; TC_ID : Character); function Gear_Factor( It : Truck ) return Natural;private type Truck is new C3A0013_1.Vehicle with record Displacement : Natural; end record;end C3A0013_3;with Report;package body C3A0013_1 is procedure Create ( It : in out Vehicle; Wheels : Natural := 4 ) is begin It.Wheels := Wheels; It.Speed := 0; end Create; procedure Accelerate( It : in out Vehicle ) is begin It.Speed := It.Speed + Gear_Factor( It.Power_Train.Within.all ); end Accelerate; procedure Decelerate( It : in out Vehicle ) is begin It.Speed := It.Speed - Gear_Factor( It.Power_Train.Within.all ); end Decelerate; procedure Stop ( It : in out Vehicle ) is begin It.Speed := 0; It.Power_Train.Engaged := False; end Stop; function Gear_Factor( It : Vehicle ) return Natural is begin return It.Power_Train.Gear; end Gear_Factor; function Speed ( It : Vehicle ) return Natural is begin return It.Speed; end Speed; function Wheels ( It : Vehicle ) return Natural is begin return It.Wheels; end Wheels; -- formal tagged parameters are implicitly aliased procedure TC_Validate( It : in out Vehicle; Speed_Trap : Natural ) is License: Vehicle_ID := It'Unchecked_Access; begin if Speed( License.all ) /= Speed_Trap then Report.Failed("Speed Trap: expected: " & Natural'Image(Speed_Trap)); end if; end TC_Validate; procedure TC_Validate( It : Vehicle; TC_ID : Character) is begin if TC_ID /= 'V' then Report.Failed("Dispatched to Vehicle"); end if; if Wheels( It ) /= 1 then Report.Failed("Not a Vehicle"); end if; end TC_Validate; procedure Up_Shift( It: in out Vehicle ) is begin It.Power_Train.Gear := It.Power_Train.Gear +1; It.Power_Train.Engaged := True; Accelerate( It ); end Up_Shift;end C3A0013_1;with Report;package body C3A0013_2 is procedure TC_Validate( It : Car; TC_ID : Character ) is begin if TC_ID /= 'C' then Report.Failed("Dispatched to Car"); end if; if Wheels( It ) /= 4 then Report.Failed("Not a Car"); end if; end TC_Validate; function Gear_Factor( It : Car ) return Natural is begin return C3A0013_1.Gear_Factor( C3A0013_1.Vehicle( It ) )*2; end Gear_Factor;end C3A0013_2;with Report;package body C3A0013_3 is procedure TC_Validate( It : Truck; TC_ID : Character) is begin if TC_ID /= 'T' then Report.Failed("Dispatched to Truck"); end if; if Wheels( It ) /= 3 then Report.Failed("Not a Truck"); end if; end TC_Validate; function Gear_Factor( It : Truck ) return Natural is begin return C3A0013_1.Gear_Factor( C3A0013_1.Vehicle( It ) )*3; end Gear_Factor;end C3A0013_3;package C3A0013_4 is procedure Perform_Tests;end C3A0013_4;with Report;with C3A0013_1;with C3A0013_2;with C3A0013_3;package body C3A0013_4 is package Root renames C3A0013_1; package Cars renames C3A0013_2; package Trucks renames C3A0013_3; type Car_Pool is array(1..4) of aliased Cars.Car; Commuters : Car_Pool; My_Car : aliased Cars.Car; Company_Car : Root.Vehicle_ID; Repair_Shop : Root.Vehicle_ID; The_Vehicle : Root.Vehicle; The_Car : Cars.Car; The_Truck : Trucks.Truck; procedure TC_Dispatch( Ptr : Root.Vehicle_ID; Char : Character ) is begin Root.TC_Validate( Ptr.all, Char ); end TC_Dispatch; procedure TC_Check_Formal_Access( Item: in out Root.Vehicle'Class; Char: Character) is begin TC_Dispatch( Item'Unchecked_Access, Char ); end TC_Check_Formal_Access; procedure Perform_Tests is begin -- Main test procedure. for Lane in Commuters'Range loop Cars.Create( Commuters(Lane) ); for Excitement in 1..Lane loop Cars.Up_Shift( Commuters(Lane) ); end loop; end loop; Cars.Create( My_Car ); Cars.Up_Shift( My_Car ); Cars.TC_Validate( My_Car, 2 ); Root.Create( The_Vehicle, 1 ); Cars.Create( The_Car , 4 ); Trucks.Create( The_Truck, 3 ); TC_Check_Formal_Access( The_Vehicle, 'V' ); TC_Check_Formal_Access( The_Car, 'C' ); TC_Check_Formal_Access( The_Truck, 'T' ); Root.Up_Shift( The_Vehicle ); Cars.Up_Shift( The_Car ); Trucks.Up_Shift( The_Truck ); Root.TC_Validate( The_Vehicle, 1 ); Cars.TC_Validate( The_Car, 2 ); Trucks.TC_Validate( The_Truck, 3 ); -- general access type may reference allocated objects Company_Car := new Cars.Car; Root.Create( Company_Car.all ); Root.Up_Shift( Company_Car.all ); Root.Up_Shift( Company_Car.all ); Root.TC_Validate( Company_Car.all, 6 ); -- general access type may reference aliased objects Repair_Shop := My_Car'Access; Root.TC_Validate( Repair_Shop.all, 2 ); -- general access type may reference aliased objects Construction: declare type Speed_List is array(Commuters'Range) of Natural; Accelerations : constant Speed_List := (2, 6, 12, 20); begin for Rotation in Commuters'Range loop Repair_Shop := Commuters(Rotation)'Access; Root.TC_Validate( Repair_Shop.all, Accelerations(Rotation) ); end loop; end Construction;end Perform_Tests;end C3A0013_4;with C3A0013_4;with Report;procedure C3A0013 isbegin Report.Test ("C3A0013", "Check general access types. Check aliased " & "nature of formal tagged type parameters. " & "Check aliased nature of the current " & "instance of a limited type. Check the " & "constraining of actual subtypes for " & "discriminated objects" ); C3A0013_4.Perform_Tests; Report.Result;end C3A0013;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?