-- CXA4034.A -- -- Grant of Unlimited Rights -- -- The Ada Conformity Assessment Authority (ACAA) holds unlimited -- rights in the software and documentation contained herein. Unlimited -- rights are the same as those granted by the U.S. Government for older -- parts of the Ada Conformity Assessment Test Suite, and are defined -- in DFAR 252.227-7013(a)(19). By making this public release, the ACAA -- intends to confer upon all recipients unlimited rights equal to those -- held by the ACAA. 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 Ada.Strings.Bounded.Slice raises Index_Error if -- High > Length (Source) or Low > Length (Source) + 1. -- (Defect Report 8652/0049). -- -- Check that Ada.Strings.Wide_Bounded.Slice raises Index_Error if -- High > Length (Source) or Low > Length (Source) + 1. -- -- CHANGE HISTORY: -- 12 FEB 2001 PHL Initial version -- 14 MAR 2001 RLB Added Wide_Bounded subtest. -- --! with Ada.Exceptions; use Ada.Exceptions; with Ada.Strings.Bounded; with Ada.Strings.Wide_Bounded; use Ada.Strings; with Report; use Report; procedure CXA4034 is package Bs is new Ada.Strings.Bounded.Generic_Bounded_Length (40); package WBs is new Ada.Strings.Wide_Bounded.Generic_Bounded_Length (32); Source : String (Ident_Int (1) .. Ident_Int (30)); Wide_Source : Wide_String (Ident_Int (1) .. Ident_Int (24)); X : Bs.Bounded_String; WX : WBs.Bounded_Wide_String; begin Test ("CXA4034", "Check that Slice raises Index_Error if either Low or High is " & "greater than the Length(Source) for Ada.Strings.Bounded and " & "Ada.Strings.Wide_Bounded"); -- Fill Source with "ABC..." for I in Source'Range loop Source (I) := Ident_Char (Character'Val (I + Character'Pos ('A') - Source'First)); end loop; -- and W with "ABC..." for I in Wide_Source'Range loop Wide_Source (I) := Ident_Wide_Char (Wide_Character'Val (I + Wide_Character'Pos ('A') - Wide_Source'First)); end loop; X := Bs.To_Bounded_String (Source); begin declare S : constant String := Bs.Slice (X, Low => Ident_Int (28), High => Ident_Int (41)); begin Failed ("No exception raised by Slice - 1"); if S = Source then Comment ("Don't optimize S"); end if; end; exception when Index_Error => null; -- Expected exception. when E: others => Failed ("Exception raised - " & Exception_Name (E) & " - " & Exception_Message (E) & " - 1"); end; begin declare S : constant String := Bs.Slice (X, Low => Ident_Int (8), High => Ident_Int (31)); begin Failed ("No exception raised by Slice - 2"); if S = Source then Comment ("Don't optimize S"); end if; end; exception when Index_Error => null; -- Expected exception. when E: others => Failed ("Exception raised - " & Exception_Name (E) & " - " & Exception_Message (E) & " - 2"); end; begin declare S : constant String := Bs.Slice (X, Low => Ident_Int (15), High => Ident_Int (30)); begin if S /= Source(15..30) then Failed ("Wrong result - 3"); end if; end; exception when E: others => Failed ("Exception raised - " & Exception_Name (E) & " - " & Exception_Message (E) & " - 3"); end; begin declare S : constant String := Bs.Slice (X, Low => Ident_Int (42), High => Ident_Int (28)); begin Failed ("No exception raised by Slice - 4"); if S = Source then Comment ("Don't optimize S"); end if; end; exception when Index_Error => null; -- Expected exception. when E: others => Failed ("Exception raised - " & Exception_Name (E) & " - " & Exception_Message (E) & " - 4"); end; begin declare S : constant String := Bs.Slice (X, Low => Ident_Int (31), High => Ident_Int (28)); begin if S /= "" then Failed ("Wrong result - 5"); end if; end; exception when E: others => Failed ("Exception raised - " & Exception_Name (E) & " - " & Exception_Message (E) & " - 5"); end; begin declare S : constant String := Bs.Slice (X, Low => Ident_Int (30), High => Ident_Int (30)); begin if S /= Source(30..30) then Failed ("Wrong result - 6"); end if; end; exception when E: others => Failed ("Exception raised - " & Exception_Name (E) & " - " & Exception_Message (E) & " - 6"); end; WX := WBs.To_Bounded_Wide_String (Wide_Source); begin declare W : constant Wide_String := WBs.Slice (WX, Low => Ident_Int (21), High => Ident_Int (33)); begin Failed ("No exception raised by Slice - 7"); if W = Wide_Source then Comment ("Don't optimize W"); end if; end; exception when Index_Error => null; -- Expected exception. when E: others => Failed ("Exception raised - " & Exception_Name (E) & " - " & Exception_Message (E) & " - 7"); end; begin declare W : constant Wide_String := WBs.Slice (WX, Low => Ident_Int (8), High => Ident_Int (25)); begin Failed ("No exception raised by Slice - 8"); if W = Wide_Source then Comment ("Don't optimize W"); end if; end; exception when Index_Error => null; -- Expected exception. when E: others => Failed ("Exception raised - " & Exception_Name (E) & " - " & Exception_Message (E) & " - 8"); end; begin declare W : constant Wide_String := WBs.Slice (WX, Low => Ident_Int (15), High => Ident_Int (24)); begin if W /= Wide_Source(15..24) then Failed ("Wrong result - 8"); end if; end; exception when E: others => Failed ("Exception raised - " & Exception_Name (E) & " - " & Exception_Message (E) & " - 9"); end; begin declare W : constant Wide_String := WBs.Slice (WX, Low => Ident_Int (36), High => Ident_Int (20)); begin Failed ("No exception raised by Slice - 10"); if W = Wide_Source then Comment ("Don't optimize W"); end if; end; exception when Index_Error => null; -- Expected exception. when E: others => Failed ("Exception raised - " & Exception_Name (E) & " - " & Exception_Message (E) & " - 10"); end; begin declare W : constant Wide_String := WBs.Slice (WX, Low => Ident_Int (25), High => Ident_Int (21)); begin if W /= "" then Failed ("Wrong result - 11"); end if; end; exception when E: others => Failed ("Exception raised - " & Exception_Name (E) & " - " & Exception_Message (E) & " - 11"); end; begin declare W : constant Wide_String := WBs.Slice (WX, Low => Ident_Int (24), High => Ident_Int (24)); begin if W /= Wide_Source(24..24) then Failed ("Wrong result - 12"); end if; end; exception when E: others => Failed ("Exception raised - " & Exception_Name (E) & " - " & Exception_Message (E) & " - 12"); end; Result; end CXA4034;