diff options
author | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
---|---|---|
committer | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
commit | 554fd8c5195424bdbcabf5de30fdc183aba391bd (patch) | |
tree | 976dc5ab7fddf506dadce60ae936f43f58787092 /gcc/testsuite/ada/acats/tests/cxb/cxb3007.a | |
download | cbb-gcc-4.6.4-upstream.tar.bz2 cbb-gcc-4.6.4-upstream.tar.xz |
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig;
imported gcc-4.6.4 source tree from verified upstream tarball.
downloading a git-generated archive based on the 'upstream' tag
should provide you with a source tree that is binary identical
to the one extracted from the above tarball.
if you have obtained the source via the command 'git clone',
however, do note that line-endings of files in your working
directory might differ from line-endings of the respective
files in the upstream repository.
Diffstat (limited to 'gcc/testsuite/ada/acats/tests/cxb/cxb3007.a')
-rw-r--r-- | gcc/testsuite/ada/acats/tests/cxb/cxb3007.a | 408 |
1 files changed, 408 insertions, 0 deletions
diff --git a/gcc/testsuite/ada/acats/tests/cxb/cxb3007.a b/gcc/testsuite/ada/acats/tests/cxb/cxb3007.a new file mode 100644 index 000000000..3837e0bae --- /dev/null +++ b/gcc/testsuite/ada/acats/tests/cxb/cxb3007.a @@ -0,0 +1,408 @@ +-- 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 => ERROR +with Ada.Characters.Latin_1; +with Ada.Characters.Handling; +with Ada.Exceptions; +with Ada.Strings.Wide_Fixed; + +procedure CXB3007 is +begin + + Report.Test ("CXB3007", "Check that the procedures To_C and To_Ada " & + "for wide strings produce correct results"); + Test_Block: + declare + + use 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 then + Report.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 loop + if wchar_t_to_Wide_Character(TC_wchar_array(i-1)) /= + TC_Wide_String(Integer(i)) + then + Report.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) then + Report.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) then + Report.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 then + Report.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 loop + if wchar_t_to_Wide_Character(TC_wchar_array(i-1)) /= + TC_Wide_String(Integer(i)) + then + Report.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) then + Report.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) then + Report.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); + begin + To_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"); + exception + when 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 then + Report.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 loop + if Wide_Character_to_wchar_t(TC_Wide_String(i)) /= + TC_wchar_array(size_t(i-1)) + then + Report.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) + then + Report.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 then + Report.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 loop + if Wide_Character_to_wchar_t(TC_Wide_String(i)) /= + TC_wchar_array(size_t(i-1)) + then + Report.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) + then + Report.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 then + Report.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 then + Report.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 loop + if Wide_Character_to_wchar_t(TC_Wide_String(i)) /= + TC_wchar_array(size_t(i-1)) + then + Report.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) + then + Report.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. + + begin + TC_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"); + exception + when 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). + + begin + TC_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"); + exception + when 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; + + exception + when 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; |