OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc1/] [gcc/] [testsuite/] [ada/] [acats/] [tests/] [c3/] [c393008.a] - Diff between revs 294 and 338

Only display areas with differences | Details | Blame | View Log

Rev 294 Rev 338
-- C393008.A
-- C393008.A
--
--
--                             Grant of Unlimited Rights
--                             Grant of Unlimited Rights
--
--
--     Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
--     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
--     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 in the software and documentation contained herein.
--     Unlimited rights are defined in DFAR 252.227-7013(a)(19).  By making
--     Unlimited rights are defined in DFAR 252.227-7013(a)(19).  By making
--     this public release, the Government intends to confer upon all
--     this public release, the Government intends to confer upon all
--     recipients unlimited rights  equal to those held by the Government.
--     recipients unlimited rights  equal to those held by the Government.
--     These rights include rights to use, duplicate, release or disclose the
--     These rights include rights to use, duplicate, release or disclose the
--     released technical data and computer software in whole or in part, in
--     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
--     any manner and for any purpose whatsoever, and to have or permit others
--     to do so.
--     to do so.
--
--
--                                    DISCLAIMER
--                                    DISCLAIMER
--
--
--     ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
--     ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
--     DISCLOSED ARE AS IS.  THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED
--     DISCLOSED ARE AS IS.  THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED
--     WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
--     WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
--     SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE
--     SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE
--     OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
--     OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
--     PARTICULAR PURPOSE OF SAID MATERIAL.
--     PARTICULAR PURPOSE OF SAID MATERIAL.
--*
--*
--
--
-- TEST OBJECTIVE:
-- TEST OBJECTIVE:
--      Check that an extended type can be derived from an abstract type.
--      Check that an extended type can be derived from an abstract type.
--
--
-- TEST DESCRIPTION:
-- TEST DESCRIPTION:
--      Declare a tagged record; declare an abstract
--      Declare a tagged record; declare an abstract
--      primitive operation and a non-abstract primitive operation of the
--      primitive operation and a non-abstract primitive operation of the
--      type.  Derive an extended type from it, including a new component.
--      type.  Derive an extended type from it, including a new component.
--      Use the derived type, the overriding operation and the inherited
--      Use the derived type, the overriding operation and the inherited
--      operation to instantiate a generic package.  The overriding operation
--      operation to instantiate a generic package.  The overriding operation
--      calls a new primitive operation and an inherited operation [so the
--      calls a new primitive operation and an inherited operation [so the
--      instantiation must get this sorted out correctly].
--      instantiation must get this sorted out correctly].
--
--
--
--
-- CHANGE HISTORY:
-- CHANGE HISTORY:
--      06 Dec 94   SAIC    ACVC 2.0
--      06 Dec 94   SAIC    ACVC 2.0
--
--
--!
--!
with Report;
with Report;
with TCTouch;
with TCTouch;
procedure C393008 is
procedure C393008 is
package C393008_0 is
package C393008_0 is
  type Status_Enum is (No_Status, Handled, Unhandled, Pending);
  type Status_Enum is (No_Status, Handled, Unhandled, Pending);
  type Alert_Type is abstract tagged record
  type Alert_Type is abstract tagged record
      Status : Status_Enum;
      Status : Status_Enum;
      Reply  : Boolean;
      Reply  : Boolean;
      Urgent : Boolean;
      Urgent : Boolean;
  end record;
  end record;
  subtype Serial_Number is Integer range 0..Integer'last;
  subtype Serial_Number is Integer range 0..Integer'last;
  Serial_Num : Serial_Number := 0;
  Serial_Num : Serial_Number := 0;
  procedure Handle   (A : in out Alert_Type) is abstract;
  procedure Handle   (A : in out Alert_Type) is abstract;
                                        -- abstract primitive operation
                                        -- abstract primitive operation
  -- the procedure Init would be _nice_ have this procedure be non_abstract
  -- the procedure Init would be _nice_ have this procedure be non_abstract
  -- and create a "base" object with a "null" constraint.  The language
  -- and create a "base" object with a "null" constraint.  The language
  -- will not allow this due to the restriction that an object of an
  -- will not allow this due to the restriction that an object of an
  -- abstract type cannot be created.  Hence Init must be abstract,
  -- abstract type cannot be created.  Hence Init must be abstract,
  -- requiring any type derived directly from Alert_Type to declare
  -- requiring any type derived directly from Alert_Type to declare
  -- an Init.
  -- an Init.
  --
  --
  -- In light of this, I have changed init to a function to more closely
  -- In light of this, I have changed init to a function to more closely
  -- model the typical usage of OO features...
  -- model the typical usage of OO features...
  function  Init return Alert_Type is abstract;
  function  Init return Alert_Type is abstract;
  procedure No_Reply (A : in out Alert_Type);
  procedure No_Reply (A : in out Alert_Type);
end C393008_0;
end C393008_0;
--=======================================================================--
--=======================================================================--
package body C393008_0 is
package body C393008_0 is
  procedure No_Reply (A : in out Alert_Type) is
  procedure No_Reply (A : in out Alert_Type) is
    begin                              -- primitive operation, not abstract
    begin                              -- primitive operation, not abstract
      TCTouch.Touch('A');  ------------------------------------------------- A
      TCTouch.Touch('A');  ------------------------------------------------- A
      if A.Status = Handled then
      if A.Status = Handled then
        A.Reply  := False;
        A.Reply  := False;
      end if;
      end if;
    end No_Reply;
    end No_Reply;
end C393008_0;
end C393008_0;
--=======================================================================--
--=======================================================================--
  generic
  generic
                        -- pass in the Alert_Type object, including its
                        -- pass in the Alert_Type object, including its
                        -- operations
                        -- operations
    type Data_Type is new C393008_0.Alert_Type with private;
    type Data_Type is new C393008_0.Alert_Type with private;
                        -- note that Alert_Type is abstract, so it may not be
                        -- note that Alert_Type is abstract, so it may not be
                        -- used as an actual parameter
                        -- used as an actual parameter
    with procedure Update     (P : in out Data_Type) is <>;  -- generic formal
    with procedure Update     (P : in out Data_Type) is <>;  -- generic formal
    with function  Initialize return Data_Type is <>;        -- generic formal
    with function  Initialize return Data_Type is <>;        -- generic formal
  package C393008_1 is
  package C393008_1 is
       -- Utilities
       -- Utilities
    procedure Modify (Item : in out Data_Type);
    procedure Modify (Item : in out Data_Type);
  end C393008_1;
  end C393008_1;
   -- Utilities
   -- Utilities
--=======================================================================--
--=======================================================================--
  package body C393008_1 is
  package body C393008_1 is
            -- Utilities
            -- Utilities
      procedure Modify (Item : in out Data_Type) is
      procedure Modify (Item : in out Data_Type) is
        begin
        begin
          TCTouch.Touch('B');  --------------------------------------------- B
          TCTouch.Touch('B');  --------------------------------------------- B
          Item := Initialize;
          Item := Initialize;
          Update (Item);
          Update (Item);
        end Modify;
        end Modify;
  end C393008_1;
  end C393008_1;
--=======================================================================--
--=======================================================================--
  package C393008_2 is
  package C393008_2 is
    type Low_Alert_Type is new C393008_0.Alert_Type with record
    type Low_Alert_Type is new C393008_0.Alert_Type with record
      Serial : C393008_0.Serial_Number;
      Serial : C393008_0.Serial_Number;
    end record;
    end record;
    procedure Serialize (LA : in out Low_Alert_Type);
    procedure Serialize (LA : in out Low_Alert_Type);
    -- inherit No_Reply
    -- inherit No_Reply
    procedure Handle (LA : in out Low_Alert_Type);
    procedure Handle (LA : in out Low_Alert_Type);
    function Init return Low_Alert_Type;
    function Init return Low_Alert_Type;
  end C393008_2;
  end C393008_2;
  package body C393008_2 is
  package body C393008_2 is
    procedure Serialize (LA : in out Low_Alert_Type) is
    procedure Serialize (LA : in out Low_Alert_Type) is
    begin                          -- new primitive operation
    begin                          -- new primitive operation
      TCTouch.Touch('C');  ------------------------------------------------- C
      TCTouch.Touch('C');  ------------------------------------------------- C
      C393008_0.Serial_Num := C393008_0.Serial_Num + 1;
      C393008_0.Serial_Num := C393008_0.Serial_Num + 1;
      LA.Serial := C393008_0.Serial_Num;
      LA.Serial := C393008_0.Serial_Num;
    end Serialize;
    end Serialize;
  -- inherit No_Reply
  -- inherit No_Reply
    function Init return Low_Alert_Type is
    function Init return Low_Alert_Type is
      TA: Low_Alert_Type;
      TA: Low_Alert_Type;
    begin
    begin
      TCTouch.Touch('D');  ------------------------------------------------- D
      TCTouch.Touch('D');  ------------------------------------------------- D
      Serialize( TA );
      Serialize( TA );
      TA.Status := C393008_0.No_Status;
      TA.Status := C393008_0.No_Status;
      return TA;
      return TA;
    end Init;
    end Init;
    procedure Handle (LA : in out Low_Alert_Type) is
    procedure Handle (LA : in out Low_Alert_Type) is
    begin                          -- overrides abstract inherited Handle
    begin                          -- overrides abstract inherited Handle
      TCTouch.Touch('E');  ------------------------------------------------- E
      TCTouch.Touch('E');  ------------------------------------------------- E
      Serialize (LA);
      Serialize (LA);
      LA.Reply := False;
      LA.Reply := False;
      LA.Status := C393008_0.Handled;
      LA.Status := C393008_0.Handled;
      No_Reply (LA);
      No_Reply (LA);
    end Handle;
    end Handle;
  end C393008_2;
  end C393008_2;
  use C393008_2;
  use C393008_2;
  package Alert_Utilities is new
  package Alert_Utilities is new
    C393008_1 (Data_Type   => Low_Alert_Type,
    C393008_1 (Data_Type   => Low_Alert_Type,
               Update      => Handle,   -- Low_Alert's Handle
               Update      => Handle,   -- Low_Alert's Handle
               Initialize  => Init);    -- inherited from Alert
               Initialize  => Init);    -- inherited from Alert
  Item : Low_Alert_Type;
  Item : Low_Alert_Type;
  use type C393008_0.Status_Enum;
  use type C393008_0.Status_Enum;
begin
begin
  Report.Test ("C393008", "Check that an extended type can be derived "&
  Report.Test ("C393008", "Check that an extended type can be derived "&
                          "from an abstract type");
                          "from an abstract type");
  Item := Init;
  Item := Init;
  if (Item.Status /= C393008_0.No_Status) or (Item.Serial /=1)  then
  if (Item.Status /= C393008_0.No_Status) or (Item.Serial /=1)  then
    Report.Failed ("Wrong initialization");
    Report.Failed ("Wrong initialization");
  end if;
  end if;
  TCTouch.Validate("DC", "Initialization Call");
  TCTouch.Validate("DC", "Initialization Call");
  Alert_Utilities.Modify (Item);
  Alert_Utilities.Modify (Item);
  if (Item.Status /= C393008_0.Handled) or (Item.Serial /= 3) then
  if (Item.Status /= C393008_0.Handled) or (Item.Serial /= 3) then
    Report.Failed ("Wrong results from Modify");
    Report.Failed ("Wrong results from Modify");
  end if;
  end if;
  TCTouch.Validate("BDCECA", "Generic Instance Call");
  TCTouch.Validate("BDCECA", "Generic Instance Call");
  Report.Result;
  Report.Result;
end C393008;
end C393008;
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.