| -- 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; |