blob: 031d01c6cb79be32a4b418a0842c9a6345241564 [file] [log] [blame]
-- CXA4032.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 procedures defined in package Ada.Strings.Unbounded
-- are available, and that they produce correct results. Specifically,
-- check the procedures Replace_Slice, Insert, Overwrite, Delete,
-- Trim (2 versions), Head, and Tail.
--
-- TEST DESCRIPTION:
-- This test demonstrates the uses of many of the procedures defined
-- in package Ada.Strings.Unbounded for use with unbounded strings.
-- The test simulates how unbounded strings could be processed in a
-- user environment, using the procedures provided in this package.
--
-- This test, when taken in conjunction with tests CXA4010, CXA4011,
-- CXA4030, and CXA4031 will constitute a test of all the functionality
-- contained in package Ada.Strings.Unbounded. This test uses a variety
-- of the procedures defined in the unbounded string package in ways
-- typical of common usage.
--
--
-- CHANGE HISTORY:
-- 02 Mar 95 SAIC Initial prerelease version.
--
--!
with Report;
with Ada.Strings;
with Ada.Strings.Maps;
with Ada.Strings.Maps.Constants;
with Ada.Strings.Unbounded;
procedure CXA4032 is
begin
Report.Test ("CXA4032", "Check that the subprograms defined in " &
"package Ada.Strings.Unbounded are available, " &
"and that they produce correct results");
Test_Block:
declare
package Unb renames Ada.Strings.Unbounded;
use Unb;
use Ada.Strings;
TC_Null_String : constant String := "";
TC_String_5 : String(1..5) := "ABCDE";
TC_Unb_String : Unb.Unbounded_String :=
Unb.To_Unbounded_String("Test String");
begin
-- Procedure Replace_Slice
begin -- Low > Source'Last+1
Unb.Replace_Slice(Source => TC_Unb_String,
Low => Unb.Length(TC_Unb_String) + 2,
High => Unb.Length(TC_Unb_String),
By => TC_String_5);
Report.Failed("Index_Error not raised by Replace_Slice when Low " &
"> Source'Last+1");
exception
when Index_Error => null; -- OK, expected exception.
when others =>
Report.Failed("Unexpected exception raised by Replace_Slice" &
"when Low > Source'Last+1");
end;
-- High >= Low
TC_Unb_String := Unb.To_Unbounded_String("Test String");
Unb.Replace_Slice(TC_Unb_String, 5, 5, TC_String_5);
if TC_Unb_String /= Unb.To_Unbounded_String("TestABCDEString") then
Report.Failed("Incorrect results from Replace_Slice - 1");
end if;
Unb.Replace_Slice(TC_Unb_String, 1, 4, TC_String_5);
if TC_Unb_String /= Unb.To_Unbounded_String("ABCDEABCDEString") then
Report.Failed("Incorrect results from Replace_Slice - 2");
end if;
Unb.Replace_Slice(TC_Unb_String,
11,
Unb.Length(TC_Unb_String),
TC_Null_String);
if TC_Unb_String /= Unb.To_Unbounded_String("ABCDEABCDE") then
Report.Failed("Incorrect results from Replace_Slice - 3");
end if;
-- High < Low
Unb.Replace_Slice(TC_Unb_String, Low => 4, High => 1, By => "xxx");
if TC_Unb_String /= Unb.To_Unbounded_String("ABCxxxDEABCDE") then
Report.Failed("Incorrect results from Replace_Slice - 4");
end if;
Unb.Replace_Slice(TC_Unb_String, Low => 1, High => 0, By => "yyy");
if TC_Unb_String /= Unb.To_Unbounded_String("yyyABCxxxDEABCDE") then
Report.Failed("Incorrect results from Replace_Slice - 5");
end if;
Unb.Replace_Slice(TC_Unb_String,
Unb.Length(TC_Unb_String) + 1,
Unb.Length(TC_Unb_String),
By => "zzz");
if TC_Unb_String /= Unb.To_Unbounded_String("yyyABCxxxDEABCDEzzz") then
Report.Failed("Incorrect results from Replace_Slice - 6");
end if;
-- Procedure Insert
TC_Unb_String := Unb.To_Unbounded_String("Test String");
begin -- Before not in Source'First..Source'Last + 1
Unb.Insert(Source => TC_Unb_String,
Before => Unb.Length(TC_Unb_String) + 2,
New_Item => TC_String_5);
Report.Failed("Index_Error not raised by Insert when Before " &
"not in the range Source'First..Source'Last+1");
exception
when Index_Error => null; -- OK, expected exception.
when others =>
Report.Failed
("Unexpected exception raised by Insert when Before not in " &
"the range Source'First..Source'Last+1");
end;
Unb.Insert(TC_Unb_String, 1, "**");
if TC_Unb_String /= Unb.To_Unbounded_String("**Test String") then
Report.Failed("Incorrect results from Insert - 1");
end if;
Unb.Insert(TC_Unb_String, Unb.Length(TC_Unb_String)+1, "**");
if TC_Unb_String /= Unb.To_Unbounded_String("**Test String**") then
Report.Failed("Incorrect results from Insert - 2");
end if;
Unb.Insert(TC_Unb_String, 8, "---");
if TC_Unb_String /= Unb.To_Unbounded_String("**Test ---String**") then
Report.Failed("Incorrect results from Insert - 3");
end if;
Unb.Insert(TC_Unb_String, 3, TC_Null_String);
if TC_Unb_String /= Unb.To_Unbounded_String("**Test ---String**") then
Report.Failed("Incorrect results from Insert - 4");
end if;
-- Procedure Overwrite
begin -- Position not in Source'First..Source'Last + 1
Unb.Overwrite(Source => TC_Unb_String,
Position => Unb.Length(TC_Unb_String) + 2,
New_Item => TC_String_5);
Report.Failed("Index_Error not raised by Overwrite when Position " &
"not in the range Source'First..Source'Last+1");
exception
when Index_Error => null; -- OK, expected exception.
when others =>
Report.Failed
("Unexpected exception raised by Overwrite when Position not " &
"in the range Source'First..Source'Last+1");
end;
TC_Unb_String := Unb.To_Unbounded_String("Test String");
Unb.Overwrite(Source => TC_Unb_String,
Position => 1,
New_Item => "XXXX");
if TC_Unb_String /= Unb.To_Unbounded_String("XXXX String") then
Report.Failed("Incorrect results from Overwrite - 1");
end if;
Unb.Overwrite(TC_Unb_String, Unb.Length(TC_Unb_String)+1, "**");
if TC_Unb_String /= Unb.To_Unbounded_String("XXXX String**") then
Report.Failed("Incorrect results from Overwrite - 2");
end if;
Unb.Overwrite(TC_Unb_String, 3, TC_Null_String);
if TC_Unb_String /= Unb.To_Unbounded_String("XXXX String**") then
Report.Failed("Incorrect results from Overwrite - 3");
end if;
Unb.Overwrite(TC_Unb_String, 1, "abcdefghijklmn");
if TC_Unb_String /= Unb.To_Unbounded_String("abcdefghijklmn") then
Report.Failed("Incorrect results from Overwrite - 4");
end if;
-- Procedure Delete
TC_Unb_String := Unb.To_Unbounded_String("Test String");
-- From > Through (No change to Source)
Unb.Delete(Source => TC_Unb_String,
From => Unb.Length(TC_Unb_String),
Through => Unb.Length(TC_Unb_String)-1);
if TC_Unb_String /= Unb.To_Unbounded_String("Test String") then
Report.Failed("Incorrect results from Delete - 1");
end if;
Unb.Delete(TC_Unb_String, 1, 0);
if TC_Unb_String /= Unb.To_Unbounded_String("Test String") then
Report.Failed("Incorrect results from Delete - 2");
end if;
-- From <= Through
Unb.Delete(TC_Unb_String, 1, 5);
if TC_Unb_String /= Unb.To_Unbounded_String("String") then
Report.Failed("Incorrect results from Delete - 3");
end if;
Unb.Delete(TC_Unb_String, 3, 3);
if TC_Unb_String /= Unb.To_Unbounded_String("Sting") then
Report.Failed("Incorrect results from Delete - 4");
end if;
-- Procedure Trim
TC_Unb_String := Unb.To_Unbounded_String("No Spaces");
Unb.Trim(Source => TC_Unb_String, Side => Ada.Strings.Both);
if TC_Unb_String /= Unb.To_Unbounded_String("No Spaces") then
Report.Failed("Incorrect results from Trim - 1");
end if;
TC_Unb_String := Unb.To_Unbounded_String(" Leading Spaces ");
Unb.Trim(TC_Unb_String, Ada.Strings.Left);
if TC_Unb_String /= Unb.To_Unbounded_String("Leading Spaces ") then
Report.Failed("Incorrect results from Trim - 2");
end if;
TC_Unb_String := Unb.To_Unbounded_String(" Ending Spaces ");
Unb.Trim(TC_Unb_String, Ada.Strings.Right);
if TC_Unb_String /= Unb.To_Unbounded_String(" Ending Spaces") then
Report.Failed("Incorrect results from Trim - 3");
end if;
TC_Unb_String :=
Unb.To_Unbounded_String(" Spaces on both ends ");
Unb.Trim(TC_Unb_String, Ada.Strings.Both);
if TC_Unb_String /=
Unb.To_Unbounded_String("Spaces on both ends")
then
Report.Failed("Incorrect results from Trim - 4");
end if;
-- Procedure Trim (with Character Set parameters)
TC_Unb_String := Unb.To_Unbounded_String("lowerCASEletters");
Unb.Trim(Source => TC_Unb_String,
Left => Ada.Strings.Maps.Constants.Lower_Set,
Right => Ada.Strings.Maps.Constants.Lower_Set);
if TC_Unb_String /= Unb.To_Unbounded_String("CASE") then
Report.Failed("Incorrect results from Trim with Sets - 1");
end if;
TC_Unb_String := Unb.To_Unbounded_String("lowerCASEletters");
Unb.Trim(TC_Unb_String,
Ada.Strings.Maps.Constants.Upper_Set,
Ada.Strings.Maps.Constants.Upper_Set);
if TC_Unb_String /= Unb.To_Unbounded_String("lowerCASEletters") then
Report.Failed("Incorrect results from Trim with Sets - 2");
end if;
TC_Unb_String := Unb.To_Unbounded_String("012abcdefghGFEDCBA789ab");
Unb.Trim(TC_Unb_String,
Ada.Strings.Maps.Constants.Hexadecimal_Digit_Set,
Ada.Strings.Maps.Constants.Hexadecimal_Digit_Set);
if TC_Unb_String /= Unb.To_Unbounded_String("ghG") then
Report.Failed("Incorrect results from Trim with Sets - 3");
end if;
-- Procedure Head
-- Count <= Source'Length
TC_Unb_String := Unb.To_Unbounded_String("Test String");
Unb.Head(Source => TC_Unb_String,
Count => 0,
Pad => '*');
if TC_Unb_String /= Unb.Null_Unbounded_String then
Report.Failed("Incorrect results from Head - 1");
end if;
TC_Unb_String := Unb.To_Unbounded_String("Test String");
Unb.Head(Source => TC_Unb_String,
Count => 4,
Pad => '*');
if TC_Unb_String /= Unb.To_Unbounded_String("Test") then
Report.Failed("Incorrect results from Head - 2");
end if;
TC_Unb_String := Unb.To_Unbounded_String("Test String");
Unb.Head(Source => TC_Unb_String,
Count => Unb.Length(TC_Unb_String),
Pad => '*');
if TC_Unb_String /= Unb.To_Unbounded_String("Test String") then
Report.Failed("Incorrect results from Head - 3");
end if;
-- Count > Source'Length
TC_Unb_String := Unb.To_Unbounded_String("Test String");
Unb.Head(Source => TC_Unb_String,
Count => Unb.Length(TC_Unb_String) + 4,
Pad => '*');
if TC_Unb_String /= Unb.To_Unbounded_String("Test String****") then
Report.Failed("Incorrect results from Head - 4");
end if;
TC_Unb_String := Unb.Null_Unbounded_String;
Unb.Head(Source => TC_Unb_String,
Count => Unb.Length(TC_Unb_String) + 3,
Pad => '*');
if TC_Unb_String /= Unb.To_Unbounded_String("***") then
Report.Failed("Incorrect results from Head - 5");
end if;
-- Procedure Tail
-- Count <= Source'Length
TC_Unb_String := Unb.To_Unbounded_String("Test String");
Unb.Tail(Source => TC_Unb_String,
Count => 0,
Pad => '*');
if TC_Unb_String /= Unb.Null_Unbounded_String then
Report.Failed("Incorrect results from Tail - 1");
end if;
TC_Unb_String := Unb.To_Unbounded_String("Test String");
Unb.Tail(Source => TC_Unb_String,
Count => 6,
Pad => '*');
if TC_Unb_String /= Unb.To_Unbounded_String("String") then
Report.Failed("Incorrect results from Tail - 2");
end if;
TC_Unb_String := Unb.To_Unbounded_String("Test String");
Unb.Tail(Source => TC_Unb_String,
Count => Unb.Length(TC_Unb_String),
Pad => '*');
if TC_Unb_String /= Unb.To_Unbounded_String("Test String") then
Report.Failed("Incorrect results from Tail - 3");
end if;
-- Count > Source'Length
TC_Unb_String := Unb.To_Unbounded_String("Test String");
Unb.Tail(Source => TC_Unb_String,
Count => Unb.Length(TC_Unb_String) + 5,
Pad => 'x');
if TC_Unb_String /= Unb.To_Unbounded_String("xxxxxTest String") then
Report.Failed("Incorrect results from Tail - 4");
end if;
TC_Unb_String := Unb.Null_Unbounded_String;
Unb.Tail(Source => TC_Unb_String,
Count => Unb.Length(TC_Unb_String) + 3,
Pad => 'X');
if TC_Unb_String /= Unb.To_Unbounded_String("XXX") then
Report.Failed("Incorrect results from Tail - 5");
end if;
exception
when others => Report.Failed ("Exception raised in Test_Block");
end Test_Block;
Report.Result;
end CXA4032;