-- CXA3004.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 the functions defined in package Ada.Characters.Handling -- for classification of and conversion between Wide_Character and -- Character values produce correct results when given the appropriate -- Character and String inputs. -- -- TEST DESCRIPTION: -- This test demonstrates the functions defined in package -- Ada.Characters.Handling which provide for the classification of and -- conversion between Wide_Characters and Characters, in character -- variables and strings. -- Each of the functions is provided with input values that are of the -- appropriate range. The results of the function processing are -- subsequently evaluated. -- -- APPLICABILITY CRITERIA: -- Applicable to all implementations using the Latin_1 set as the -- definition of Character. -- -- -- CHANGE HISTORY: -- 06 Dec 94 SAIC ACVC 2.0 -- 27 Dec 94 SAIC Corrected variable names. -- --! with Report; with Ada.Characters.Handling; procedure CXA3004 is begin Report.Test ("CXA3004", "Check that the functions defined in package " & "Ada.Characters.Handling for classification " & "of and conversion between Wide_Character and " & "Character values produce correct results " & "when given the appropriate Character " & "and String inputs"); Test_Block: declare package ACH renames Ada.Characters.Handling; Char_End : Integer := 255; WC_Start : Integer := 256; Sub_Char : Character := '*'; Blank : Character := ' '; First_Char : Character := Character'First; Last_Char : Character := Character'Last; F_Char : Character := 'F'; First_Wide_Char : Wide_Character := Wide_Character'First; Last_Non_Wide_Char : Wide_Character := Wide_Character'Val(Char_End); First_Unique_Wide_Char : Wide_Character := Wide_Character'Val(WC_Start); Last_Wide_Char : Wide_Character := Wide_Character'Last; A_String : String (1..3) := First_Char & 'X' & Last_Char; A_Wide_String : Wide_String (1..3) := First_Wide_Char & ACH.To_Wide_Character('X') & ACH.To_Wide_Character(Last_Char); Unique_Wide_String : Wide_String (1..2) := First_Unique_Wide_Char & Last_Wide_Char; Mixed_Wide_String : Wide_String (1..6) := ACH.To_Wide_Character('A') & First_Wide_Char & Last_Non_Wide_Char & First_Unique_Wide_Char & Last_Wide_Char & ACH.To_Wide_Character('Z'); Basic_Char : Character := 'A'; Basic_Wide_Char : Wide_Character := 'A'; Basic_String : String (1..6) := "ABCXYZ"; Basic_Wide_String : Wide_String (1..6) := "ABCXYZ"; begin -- Function Is_Character if not ACH.Is_Character(First_Wide_Char) then Report.Failed ("Incorrect result from Is_Character - 1"); end if; if ACH.Is_Character(First_Unique_Wide_Char) or ACH.Is_Character(Last_Wide_Char) then Report.Failed ("Incorrect result from Is_Character - 2"); end if; -- Function Is_String if not ACH.Is_String(A_Wide_String) then Report.Failed ("Incorrect result from Is_String - 1"); end if; if ACH.Is_String(Unique_Wide_String) or ACH.Is_String(Mixed_Wide_String) then Report.Failed ("Incorrect result from Is_String - 2"); end if; -- Function To_Character -- Use default substitution character in call of To_Character. if ACH.To_Character(First_Wide_Char) /= First_Char or ACH.To_Character(Last_Non_Wide_Char) /= Last_Char then Report.Failed ("Incorrect result from To_Character - 1"); end if; -- Provide a substitution character for use with To_Character. if ACH.To_Character(First_Unique_Wide_Char, Blank) /= Blank or ACH.To_Character(First_Unique_Wide_Char, Sub_Char) /= Sub_Char or ACH.To_Character(Last_Wide_Char) /= ' ' -- default then Report.Failed ("Incorrect result from To_Character - 2"); end if; -- Function To_String if ACH.To_String(A_Wide_String) /= A_String then Report.Failed ("Incorrect result from To_String - 1"); end if; if ACH.To_String(Unique_Wide_String, Sub_Char) /= "**" then Report.Failed ("Incorrect result from To_String - 2"); end if; if ACH.To_String(Mixed_Wide_String, Sub_Char) /= ('A' & First_Char & Last_Char & "**" & 'Z') or ACH.To_String(Mixed_Wide_String, Sub_Char) /= (ACH.To_Character(Mixed_Wide_String(1), Sub_Char) & ACH.To_Character(Mixed_Wide_String(2), Sub_Char) & ACH.To_Character(Mixed_Wide_String(3), Sub_Char) & ACH.To_Character(Mixed_Wide_String(4), Sub_Char) & ACH.To_Character(Mixed_Wide_String(5), Sub_Char) & ACH.To_Character(Mixed_Wide_String(6), Sub_Char)) then Report.Failed ("Incorrect result from To_String - 3"); end if; -- Function To_Wide_Character if ACH.To_Wide_Character(Basic_Char) /= Basic_Wide_Char then Report.Failed ("Incorrect result from To_Wide_Character"); end if; -- Function To_Wide_String if not (ACH.To_Wide_String(Basic_String) = Basic_Wide_String) then Report.Failed ("Incorrect result from To_Wide_String"); end if; -- Functions Used In Combination if not ACH.Is_Character (ACH.To_Wide_Character ( ACH.To_Character(First_Wide_Char))) then Report.Failed ("Incorrect result from functions in combination - 1"); end if; if not ACH.Is_String(ACH.To_Wide_String(ACH.To_String(A_Wide_String))) then Report.Failed ("Incorrect result from functions in combination - 2"); end if; if ACH.To_String(ACH.To_Wide_Character('A') & ACH.To_Wide_Character(F_Char) & ACH.To_Wide_Character('Z')) /= "AFZ" then Report.Failed ("Incorrect result from functions in combination - 3"); end if; exception when others => Report.Failed ("Exception raised in Test_Block"); end Test_Block; Report.Result; end CXA3004;