URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [ada/] [acats/] [tests/] [cxa/] [cxa4004.a] - Rev 720
Compare with Previous | Blame | View Log
-- CXA4004.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 subprograms defined in package Ada.Strings.Fixed are-- available, and that they produce correct results. Specifically, check-- the subprograms Count, Find_Token, Index, Index_Non_Blank, and Move.---- TEST DESCRIPTION:-- This test, when combined with tests CXA4002,3, and 5 will provide-- thorough coverage of the functionality found in Ada.Strings.Fixed.-- This test contains many small, specific test cases, situations that-- although common in user environments, are often difficult to generate-- in large numbers in a application-based test.------ CHANGE HISTORY:-- 06 Dec 94 SAIC ACVC 2.0-- 10 Apr 95 SAIC Corrected subtest for Move, Drop=Right.----!with Report;with Ada.Strings;with Ada.Strings.Fixed;with Ada.Strings.Maps;procedure CXA4004 isbeginReport.Test("CXA4004", "Check that the subprograms defined in " &"package Ada.Strings.Fixed are available, " &"and that they produce correct results");Test_Block:declarepackage ASF renames Ada.Strings.Fixed;package Maps renames Ada.Strings.Maps;Result_String : String(1..10) := (others => Ada.Strings.Space);Source_String1 : String(1..5) := "abcde"; -- odd length stringSource_String2 : String(1..6) := "abcdef"; -- even length stringSource_String3 : String(1..12) := "abcdefghijkl";Source_String4 : String(1..12) := "abcdefghij "; -- last two ch padSource_String5 : String(1..12) := " cdefghijkl"; -- first two ch padSource_String6 : String(1..12) := "abcdefabcdef";Location : Natural := 0;Slice_Start : Positive;Slice_End,Slice_Count : Natural := 0;CD_Set : Maps.Character_Set := Maps.To_Set("cd");ABCD_Set : Maps.Character_Set := Maps.To_Set("abcd");A_to_F_Set : Maps.Character_Set := Maps.To_Set("abcdef");CD_to_XY_Map : Maps.Character_Mapping :=Maps.To_Mapping(From => "cd", To => "xy");begin-- Procedure Move-- Evaluate the Procedure Move with various combinations of-- parameters.-- Justify = Left (default case)ASF.Move(Source => Source_String1, -- "abcde"Target => Result_String);if Result_String /= "abcde " thenReport.Failed("Incorrect result from Move with Justify = Left");end if;-- Justify = RightASF.Move(Source => Source_String2, -- "abcdef"Target => Result_String,Drop => Ada.Strings.Error,Justify => Ada.Strings.Right);if Result_String /= " abcdef" thenReport.Failed("Incorrect result from Move with Justify = Right");end if;-- Justify = Center (two cases, odd and even pad lengths)ASF.Move(Source_String1, -- "abcde"Result_String,Ada.Strings.Error,Ada.Strings.Center,'x'); -- non-default padding.if Result_String /= "xxabcdexxx" then -- Unequal padding added rightReport.Failed("Incorrect result from Move with Justify = Center-1");end if;ASF.Move(Source_String2, -- "abcdef"Result_String,Ada.Strings.Error,Ada.Strings.Center);if Result_String /= " abcdef " then -- Equal padding added on L/R.Report.Failed("Incorrect result from Move with Justify = Center-2");end if;-- When the source string is longer than the target string, several-- cases can be examined, with the results depending on the value of-- the Drop parameter.-- Drop = LeftASF.Move(Source => Source_String3, -- "abcdefghijkl"Target => Result_String,Drop => Ada.Strings.Left);if Result_String /= "cdefghijkl" thenReport.Failed("Incorrect result from Move with Drop = Left");end if;-- Drop = RightASF.Move(Source_String3, Result_String, Ada.Strings.Right);if Result_String /= "abcdefghij" thenReport.Failed("Incorrect result from Move with Drop = Right");end if;-- Drop = Error-- The effect in this case depends on the value of the justify-- parameter, and on whether any characters in Source other than-- Pad would fail to be copied.-- Drop = Error, Justify = Left, right overflow characters are pad.ASF.Move(Source => Source_String4, -- "abcdefghij "Target => Result_String,Drop => Ada.Strings.Error,Justify => Ada.Strings.Left);if not(Result_String = "abcdefghij") then -- leftmost 10 charactersReport.Failed("Incorrect result from Move with Drop = Error - 1");end if;-- Drop = Error, Justify = Right, left overflow characters are pad.ASF.Move(Source_String5, -- " cdefghijkl"Result_String,Ada.Strings.Error,Ada.Strings.Right);if Result_String /= "cdefghijkl" then -- rightmost 10 charactersReport.Failed("Incorrect result from Move with Drop = Error - 2");end if;-- In other cases of Drop=Error, Length_Error is propagated, such as:beginASF.Move(Source_String3, -- 12 characters, no Pad.Result_String, -- 10 charactersAda.Strings.Error,Ada.Strings.Left);Report.Failed("Length_Error not raised by Move - 1");exceptionwhen Ada.Strings.Length_Error => null; -- OKwhen others =>Report.Failed("Incorrect exception raised by Move - 1");end;-- Function Index-- (Other usage examples of this function found in CXA4002-3.)-- Check when the pattern is not found in the source.if ASF.Index("abcdef", "gh") /= 0 orASF.Index("abcde", "abcdef") /= 0 or -- pattern > sourceASF.Index("xyz","abcde",Ada.Strings.Backward) /= 0 orASF.Index("", "ab") /= 0 or -- null source string.ASF.Index("abcde", " ") /= 0 -- blank pattern.thenReport.Failed("Incorrect result from Index, no pattern match");end if;-- Check that Pattern_Error is raised when the pattern is the-- null string.beginLocation := ASF.Index(Source_String6, -- "abcdefabcdef""", -- null pattern string.Ada.Strings.Forward);Report.Failed("Pattern_Error not raised by Index");exceptionwhen Ada.Strings.Pattern_Error => null; -- OK, expected exception.when others =>Report.Failed("Incorrect exception raised by Index, null pattern");end;-- Use the search direction "backward" to locate the particular-- pattern within the source string.Location := ASF.Index(Source_String6, -- "abcdefabcdef""de", -- slice 4..5, 10..11Ada.Strings.Backward); -- search from right end.if Location /= 10 thenReport.Failed("Incorrect result from Index going Backward");end if;-- Using the version of Index testing character set membership,-- check combinations of forward/backward, inside/outside parameter-- configurations.if ASF.Index(Source => Source_String1, -- "abcde"Set => CD_Set,Test => Ada.Strings.Inside,Going => Ada.Strings.Forward) /= 3 or -- 'c' at pos 3.ASF.Index(Source_String6, -- "abcdefabcdef"CD_Set,Ada.Strings.Outside,Ada.Strings.Backward) /= 12 or -- 'f' at position 12ASF.Index(Source_String6, -- "abcdefabcdef"CD_Set,Ada.Strings.Inside,Ada.Strings.Backward) /= 10 or -- 'd' at position 10ASF.Index("cdcdcdcdacdcdcdcd",CD_Set,Ada.Strings.Outside,Ada.Strings.Forward) /= 9 -- 'a' at position 9thenReport.Failed("Incorrect result from function Index for sets - 1");end if;-- Additional interesting uses/combinations using Index for sets.if ASF.Index("cd", -- same size, str-setCD_Set,Ada.Strings.Inside,Ada.Strings.Forward) /= 1 or -- 'c' at position 1ASF.Index("abcd", -- same size, str-set,Maps.To_Set("efgh"), -- different contents.Ada.Strings.Outside,Ada.Strings.Forward) /= 1 orASF.Index("abccd", -- set > stringMaps.To_Set("acegik"),Ada.Strings.Inside,Ada.Strings.Backward) /= 4 or -- 'c' at position 4ASF.Index("abcde",Maps.Null_Set) /= 0 orASF.Index("", -- Null string.CD_Set) /= 0 orASF.Index("abc ab", -- blank includedMaps.To_Set("e "), -- in string and set.Ada.Strings.Inside,Ada.Strings.Backward) /= 4 -- blank in string.thenReport.Failed("Incorrect result from function Index for sets - 2");end if;-- Function Index_Non_Blank.-- (Other usage examples of this function found in CXA4002-3.)if ASF.Index_Non_Blank(Source => Source_String4, -- "abcdefghij "Going => Ada.Strings.Backward) /= 10 orASF.Index_Non_Blank("abc def ghi jkl ",Ada.Strings.Backward) /= 15 orASF.Index_Non_Blank(" abcdef") /= 3 orASF.Index_Non_Blank(" ") /= 0thenReport.Failed("Incorrect result from Index_Non_Blank");end if;-- Function Count-- (Other usage examples of this function found in CXA4002-3.)if ASF.Count("abababa", "aba") /= 2 orASF.Count("abababa", "ab" ) /= 3 orASF.Count("babababa", "ab") /= 3 orASF.Count("abaabaaba", "aba") /= 3 orASF.Count("xxxxxxxxxxxxxxxxxxxy", "xy") /= 1 orASF.Count("xxxxxxxxxxxxxxxxxxxx", "x") /= 20thenReport.Failed("Incorrect result from Function Count");end if;-- Determine the number of slices of Source that when mapped to a-- non-identity map, match the pattern string.Slice_Count := ASF.Count(Source_String6, -- "abcdefabcdef""xy",CD_to_XY_Map); -- maps 'c' to 'x', 'd' to 'y'if Slice_Count /= 2 then -- two slices "xy" in "mapped" Source_String6Report.Failed("Incorrect result from Count with non-identity map");end if;-- If the pattern supplied to Function Count is the null string, then-- Pattern_Error is propagated.declareThe_Null_String : constant String := "";beginSlice_Count := ASF.Count(Source_String6, The_Null_String);Report.Failed("Pattern_Error not raised by Function Count");exceptionwhen Ada.Strings.Pattern_Error => null; -- OKwhen others =>Report.Failed("Incorrect exception from Count with null pattern");end;-- Function Count returning the number of characters in a particular-- set that are found in source string.if ASF.Count(Source_String6, CD_Set) /= 4 then -- 2 'c' and 'd' chars.Report.Failed("Incorrect result from Count with set");end if;-- Function Find_Token.-- (Other usage examples of this function found in CXA4002-3.)ASF.Find_Token(Source => Source_String6, -- First slice with noSet => ABCD_Set, -- 'a', 'b', 'c', or 'd'Test => Ada.Strings.Outside, -- is "ef" at 5..6.First => Slice_Start,Last => Slice_End);if Slice_Start /= 5 or Slice_End /= 6 thenReport.Failed("Incorrect result from Find_Token - 1");end if;-- If no appropriate slice is contained by the source string, then the-- value returned in Last is zero, and the value in First is-- Source'First.ASF.Find_Token(Source_String6, -- "abcdefabcdef"A_to_F_Set, -- Set of characters 'a' thru 'f'.Ada.Strings.Outside, -- No characters outside this set.Slice_Start,Slice_End);if Slice_Start /= Source_String6'First or Slice_End /= 0 thenReport.Failed("Incorrect result from Find_Token - 2");end if;-- Additional testing of Find_Token.ASF.Find_Token("eabcdabcddcab",ABCD_Set,Ada.Strings.Inside,Slice_Start,Slice_End);if Slice_Start /= 2 or Slice_End /= 13 thenReport.Failed("Incorrect result from Find_Token - 3");end if;ASF.Find_Token("efghijklabcdabcd",ABCD_Set,Ada.Strings.Outside,Slice_Start,Slice_End);if Slice_Start /= 1 or Slice_End /= 8 thenReport.Failed("Incorrect result from Find_Token - 4");end if;ASF.Find_Token("abcdefgabcdabcd",ABCD_Set,Ada.Strings.Outside,Slice_Start,Slice_End);if Slice_Start /= 5 or Slice_End /= 7 thenReport.Failed("Incorrect result from Find_Token - 5");end if;ASF.Find_Token("abcdcbabcdcba",ABCD_Set,Ada.Strings.Inside,Slice_Start,Slice_End);if Slice_Start /= 1 or Slice_End /= 13 thenReport.Failed("Incorrect result from Find_Token - 6");end if;exceptionwhen others => Report.Failed("Exception raised in Test_Block");end Test_Block;Report.Result;end CXA4004;
