URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [ada/] [acats/] [tests/] [cxb/] [cxb3007.a] - Rev 720
Compare with Previous | Blame | View Log
-- CXB3007.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 procedure To_C converts the Wide_Character elements-- of a Wide_String parameter into wchar_t elements of the wchar_array-- parameter Target, with wide_nul termination if parameter Append_Nul-- is true.---- Check that the out parameter Count of procedure To_C is set to the-- appropriate value for both the wide_nul/no wide_nul terminated cases.---- Check that Constraint_Error is propagated by procedure To_C if the-- length of the wchar_array parameter Target is not sufficient to-- hold the converted Wide_String value.---- Check that the Procedure To_Ada converts wchar_t elements of the-- wchar_array parameter Item to the corresponding Wide_Character-- elements of Wide_String out parameter Target.---- Check that Constraint_Error is propagated by Procedure To_Ada if the-- length of Wide_String parameter Target is not long enough to hold the-- converted wchar_array value.---- Check that Terminator_Error is propagated by Procedure To_Ada if the-- parameter Trim_Nul is set to True, but the actual Item parameter-- contains no wide_nul wchar_t.---- TEST DESCRIPTION:-- This test uses a variety of Wide_String, and wchar_array objects to-- test versions of the To_C and To_Ada procedures.---- This test assumes that the following characters are all included-- in the implementation defined type Interfaces.C.wchar_t:-- ' ', 'a'..'z', 'A'..'Z', and '-'.---- APPLICABILITY CRITERIA:-- This test is applicable to all implementations that provide-- package Interfaces.C. If an implementation provides-- package Interfaces.C, this test must compile, execute, and-- report "PASSED".---- CHANGE HISTORY:-- 01 Sep 95 SAIC Initial prerelease version.-- 09 May 96 SAIC Incorporated reviewer comments for ACVC 2.1.-- 26 Oct 96 SAIC Incorporated reviewer comments.-- 14 Sep 99 RLB Removed incorrect and unnecessary-- Unchecked_Conversion.----!with Report;with Interfaces.C; -- N/A => ERRORwith Ada.Characters.Latin_1;with Ada.Characters.Handling;with Ada.Exceptions;with Ada.Strings.Wide_Fixed;procedure CXB3007 isbeginReport.Test ("CXB3007", "Check that the procedures To_C and To_Ada " &"for wide strings produce correct results");Test_Block:declareuse Interfaces, Interfaces.C;use Ada.Characters, Ada.Characters.Handling;use Ada.Exceptions;use Ada.Strings.Wide_Fixed;TC_Short_Wide_String : Wide_String(1..4) :=(others => Wide_Character'First);TC_Wide_String : Wide_String(1..8) :=(others => Wide_Character'First);TC_wchar_array : wchar_array(0..7) := (others => wchar_t'First);TC_size_t_Count : size_t := size_t'First;TC_Natural_Count : Natural := Natural'First;-- We can use the wide character forms of To_Ada and To_C here to check-- the results; they were tested in CXB3006. We give them different-- names to avoid confusion below.function Wide_Character_to_wchar_t (Source : in Wide_Character)return wchar_t renames To_C;function wchar_t_to_Wide_Character (Source : in wchar_t)return Wide_Character renames To_Ada;begin-- Check that the procedure To_C converts the Wide_Character elements-- of a Wide_String parameter into wchar_t elements of wchar_array out-- parameter Target.---- Case of wide_nul termination.TC_Wide_String(1..6) := "abcdef";To_C (Item => TC_Wide_String(1..6), -- Source slice of length 6.Target => TC_wchar_array,Count => TC_size_t_Count,Append_Nul => True);-- Check that the out parameter Count is set to the appropriate value-- for the wide_nul terminated case.if TC_size_t_Count /= 7 thenReport.Failed("Incorrect setting of out parameter Count by " &"Procedure To_C when Append_Nul => True");end if;for i in 1..TC_size_t_Count-1 loopif wchar_t_to_Wide_Character(TC_wchar_array(i-1)) /=TC_Wide_String(Integer(i))thenReport.Failed("Incorrect result from Procedure To_C when " &"checking individual wchar_t values, case of " &"Append_Nul => True; " &"wchar_t position = " & Integer'Image(Integer(i)));end if;end loop;if not Is_Nul_Terminated(TC_wchar_array) thenReport.Failed("No wide_nul wchar_t appended to the wchar_array " &"result from Procedure To_C when Append_Nul => True");end if;if TC_wchar_array(0..6) /= To_C("abcdef", True) thenReport.Failed("Incorrect result from Procedure To_C when " &"directly comparing wchar_array results, case " &"of Append_Nul => True");end if;-- Check Procedure To_C with no wide_nul termination.TC_wchar_array := (others => Wide_Character_to_wchar_t('M'));TC_Wide_String(1..4) := "WXYZ";To_C (Item => TC_Wide_String(1..4), -- Source slice of length 4.Target => TC_wchar_array,Count => TC_size_t_Count,Append_Nul => False);-- Check that the out parameter Count is set to the appropriate value-- for the non-wide_nul terminated case.if TC_size_t_Count /= 4 thenReport.Failed("Incorrect setting of out parameter Count by " &"Procedure To_C when Append_Nul => False");end if;for i in 1..TC_size_t_Count loopif wchar_t_to_Wide_Character(TC_wchar_array(i-1)) /=TC_Wide_String(Integer(i))thenReport.Failed("Incorrect result from Procedure To_C when " &"checking individual wchar_t values, case of " &"Append_Nul => False; " &"wchar_t position = " & Integer'Image(Integer(i)));end if;end loop;if Is_Nul_Terminated(TC_wchar_array) thenReport.Failed("The wide_nul wchar_t was appended to the wchar_array " &"result of Procedure To_C when Append_Nul => False");end if;if TC_wchar_array(0..3) /= To_C("WXYZ", False) thenReport.Failed("Incorrect result from Procedure To_C when " &"directly comparing wchar_array results, case " &"of Append_Nul => False");end if;-- Check that Constraint_Error is raised by procedure To_C if the-- length of the target wchar_array parameter is not sufficient to-- hold the converted Wide_String value (plus wide_nul if Append_Nul-- is True).TC_wchar_array := (others => wchar_t'First);beginTo_C("A string too long",TC_wchar_array,TC_size_t_Count,Append_Nul => True);Report.Failed("Constraint_Error not raised when the Target " &"parameter of Procedure To_C is not long enough " &"to hold the converted Wide_String");Report.Comment(To_Character(wchar_t_to_Wide_Character(TC_wchar_array(0))) &" printed to defeat optimization");exceptionwhen Constraint_Error => null; -- OK, expected exception.when others =>Report.Failed("Incorrect exception raised by Procedure " &"To_C when the Target parameter is not long " &"enough to contain the wchar_array result");end;-- Check that the procedure To_Ada converts wchar_t elements of the-- wchar_array parameter Item to the corresponding Wide_Character-- elements of Wide_String out parameter Target, with result wide-- string length based on the Trim_Nul parameter.---- Case of appended wide_nul wchar_t on the wchar_array In parameter.TC_wchar_array :=To_C ("ACVC-95", Append_Nul => True); -- 8 total chars.To_Ada (Item => TC_wchar_array,Target => TC_Wide_String,Count => TC_Natural_Count,Trim_Nul => False);if TC_Natural_Count /= 8 thenReport.Failed("Incorrect value returned in out parameter Count " &"by Procedure To_Ada, case of Trim_Nul => False");end if;for i in 1..TC_Natural_Count loopif Wide_Character_to_wchar_t(TC_Wide_String(i)) /=TC_wchar_array(size_t(i-1))thenReport.Failed("Incorrect result from Procedure To_Ada when " &"checking individual wchar_t values, case of " &"Trim_Nul => False, when a wide_nul is present " &"in the wchar_array input parameter; " &"position = " & Integer'Image(Integer(i)));end if;end loop;if TC_Wide_String(TC_Natural_Count) /= To_Wide_Character(Latin_1.Nul)thenReport.Failed("Last Wide_Character of Wide_String result of " &"Procedure To_Ada is not Nul, even though a " &"wide_nul was present in the wchar_array argument, " &"and the Trim_Nul parameter was set to False");end if;TC_Wide_String := (others => Wide_Character'First);TC_wchar_array(0..3) := To_C ("XYz", Append_Nul => True); -- 4 chars.To_Ada (Item => TC_wchar_array,Target => TC_Wide_String,Count => TC_Natural_Count,Trim_Nul => True);if TC_Natural_Count /= 3 thenReport.Failed("Incorrect value returned in out parameter Count " &"by Procedure To_Ada, case of Trim_Nul => True");end if;for i in 1..TC_Natural_Count loopif Wide_Character_to_wchar_t(TC_Wide_String(i)) /=TC_wchar_array(size_t(i-1))thenReport.Failed("Incorrect result from Procedure To_Ada when " &"checking individual wchar_t values, case of " &"Trim_Nul => True, when a wide_nul is present " &"in the wchar_array input parameter; " &"position = " & Integer'Image(Integer(i)));end if;end loop;if TC_Wide_String(TC_Natural_Count) = To_Wide_Character(Latin_1.Nul)thenReport.Failed("Last Wide_Character of Wide_String result of " &"Procedure To_Ada is Nul, even though the " &"Trim_Nul parameter was set to True");end if;if TC_Wide_String(TC_Natural_Count+1) /= Wide_Character'First thenReport.Failed("Incorrect replacement from To_Ada");end if;-- Case of no wide_nul wchar_t present in the wchar_array argument.TC_Wide_String := (others => Wide_Character'First);TC_wchar_array := To_C ("ABCDWXYZ", Append_Nul => False);To_Ada (Item => TC_wchar_array,Target => TC_Wide_String,Count => TC_Natural_Count,Trim_Nul => False);if TC_Natural_Count /= 8 thenReport.Failed("Incorrect value returned in out parameter Count " &"by Procedure To_Ada, case of Trim_Nul => False, " &"with no wide_nul wchar_t present in the parameter " &"Item");end if;for i in 1..TC_Natural_Count loopif Wide_Character_to_wchar_t(TC_Wide_String(i)) /=TC_wchar_array(size_t(i-1))thenReport.Failed("Incorrect result from Procedure To_Ada when " &"checking individual wchar_t values, case of " &"Trim_Nul => False, when a wide_nul is not " &"present in the wchar_array input parameter; " &"position = " & Integer'Image(Integer(i)));end if;end loop;if TC_Wide_String(TC_Natural_Count) = To_Wide_Character(Latin_1.Nul)thenReport.Failed("Last Wide_Character of Wide_String result of " &"Procedure To_Ada is Nul, even though the wide_nul " &"wchar_t was not present in the parameter Item, " &"with the parameter Trim_Nul => False");end if;-- Check that the Procedure To_Ada raises Terminator_Error if the-- parameter Trim_Nul is set to True, but the actual Item parameter-- does not contain the wide_nul wchar_t.beginTC_Wide_String := (others => Wide_Character'First);TC_wchar_array := To_C ("ABCDWXYZ", Append_Nul => False);To_Ada(TC_wchar_array,TC_Wide_String,Count => TC_Natural_Count,Trim_Nul => True);Report.Failed("Terminator_Error not raised when Item " &"parameter of To_Ada does not contain the " &"wide_nul wchar_t, but parameter Trim_Nul => True");Report.Comment(To_String(TC_Wide_String) &" printed to defeat optimization");exceptionwhen Terminator_Error => null; -- OK, expected exception.when others =>Report.Failed("Incorrect exception raised by Procedure " &"To_Ada when the Item parameter does not " &"contain the wide_nul wchar_t, but parameter " &"Trim_Nul => True");end;-- Check that Constraint_Error is propagated by procedure To_Ada if the-- length of Wide_String parameter Target is not long enough to hold the-- converted wchar_array value (plus wide_nul if Trim_Nul is False).beginTC_wchar_array(0..4) := To_C ("ABCD", Append_Nul => True);To_Ada(TC_wchar_array(0..4),TC_Short_Wide_String, -- Length of 4.Count => TC_Natural_Count,Trim_Nul => False);Report.Failed("Constraint_Error not raised when Wide_String " &"parameter Target of Procedure To_Ada is not " &"long enough to hold the converted wchar_ts");Report.Comment(To_String(TC_Short_Wide_String) &" printed to defeat optimization");exceptionwhen Constraint_Error => null; -- OK, expected exception.when others =>Report.Failed("Incorrect exception raised by Procedure " &"To_Ada when Wide_String parameter Target is " &"not long enough to hold the converted wchar_ts");end;exceptionwhen The_Error : others =>Report.Failed ("The following exception was raised in the " &"Test_Block: " & Exception_Name(The_Error));end Test_Block;Report.Result;end CXB3007;
