view gcc/testsuite/ada/acats/tests/c2/c250001.aw @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
line wrap: on
line source

-- C250001.AW
--
--                             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 wide character literals are supported.
--      Check that wide character string literals are supported.
--
-- TEST DESCRIPTION:
--      This test utilizes the brackets scheme for representing wide character
--      values in transportable 7 bit ASCII as proposed by Robert Dewar;
--      this test defines Wide_Character and Wide_String objects, and assigns
--      and tests several sample values.
--
-- SPECIAL REQUIREMENTS:
--
--      This file must be preprocessed before it can be executed as a test.
--
--      This test requires that all occurrences of the bracket escape
--      representation for wide characters be replaced, as appropriate, with
--      the corresponding wide character as represented by the implementation.
--
--      Characters above ASCII.Del are represented by an 8 character sequence:
--
--          ["xxxx"]
--
--      where the character code represented is specified by four hexadecimal
--      digits, (<xxxx>) upper case. For example the wide character with the
--      code 16#ABCD# is represented by the eight character sequence:
--
--          ["ABCD"]
--
--      The following function documents the translation algorithm:
--
--     function To_Wide( S:String ) return Wide_character is
--       Numerical : Natural := 0;
--       type Xlate is array(Character range '0'..'F') of Natural;
--       Xlation : Xlate
--               := ('0' =>  0, '1' =>  1, '2' =>  2, '3' =>  3, '4' =>  4,
--                   '5' =>  5, '6' =>  6, '7' =>  7, '8' =>  8, '9' =>  9,
--                   'A' => 10, 'B' => 11, 'C' => 12, 'D' => 13, 'E' => 14,
--                   'F' => 15,  others => 0 );
--     begin
--       for I in S'Range loop
--         Numerical := Numerical * 16 + Xlation(S(I));
--       end loop;
--       return Wide_Character'Val(Numerical);  -- the returned value is
--                                   implementation dependent
--     exception
--       when Constraint_Error => raise;
--     end To_Wide;
--
--
-- CHANGE HISTORY:
--      26 OCT 95   SAIC   Initial .Aversion
--      11 APR 96   SAIC   Minor robustness changes for 2.1
--      12 NOV 96   SAIC   Changed file extension to .AW
--
--!

----------------------------------------------------------------- C250001_0

package C250001_0 is

  -- The wide characters used in this test are sequential starting with
  -- the character '["4F42"]' 16#0F42#

  Four_Eff_Four_Two : constant Wide_Character := '["4F42"]';

  Four_Eff_4_3_Through_9 : constant Wide_String := 
               "["4F43"]["4F44"]["4F45"]["4F46"]["4F47"]["4F48"]["4F49"]";

  Four_Eff_A_B : constant Wide_String := "["4F4A"]["4F4B"]";

end C250001_0;

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

-- no package body C250001_0 is required or allowed

------------------------------------------------------------------- C250001

with Report;
with C250001_0;
with Ada.Tags;

procedure C250001 is
  use C250001_0; 

  function Hex( N: Natural ) return String is
    S : String := "xxxx";
    T : String := "0123456789ABCDEF";
    V : Natural := N;
  begin
    for I in reverse 1..4 loop
      S(I) := T(V rem 16 +1);
      V := V / 16;
    end loop;
    return S;
  end Hex;

  procedure Match( Check : Wide_Character; Matching : Natural ) is
  begin
    if Wide_Character'Pos( Check ) /= Matching then
      Report.Failed( "Didn't match for " & Hex(Matching) );
    end if;
  end Match;

  type Value_List is array(Positive range <>) of Natural;

  procedure Match( Check : Wide_String; Matching : Value_List ) is
  begin
    if Check'Length /= Matching'Length then
      Report.Failed( "Check'Length /= Matching'Length" );
    else
      for I in Check'Range loop
        Match( Check(I), Matching(I) );
      end loop;
    end if;
  end Match;

begin  -- Main test procedure.

  Report.Test ("C250001", "Check that wide character literals " &
                          "are supported.  Check that wide character " &
                          "string literals are supported." );

  Match( Four_Eff_Four_Two, 16#4F42# );

  Match(Four_Eff_4_3_Through_9,
         (16#4F43#,16#4F44#,16#4F45#,16#4F46#,16#4F47#,16#4F48#,16#4F49#) );

 -- check catenations

  Match( Four_Eff_Four_Two & Four_Eff_Four_Two, (16#4F42#,16#4F42#) );

  Match( Four_Eff_Four_Two & Four_Eff_A_B, (16#4F42#,16#4F4A#,16#4F4B#) );

  Match( Four_Eff_A_B & Four_Eff_Four_Two, (16#4F4A#,16#4F4B#,16#4F42#) );

  Match( Four_Eff_A_B & Four_Eff_A_B,
         (16#4F4A#,16#4F4B#,16#4F4A#,16#4F4B#) );

  Report.Result;

end C250001;