view gcc/testsuite/ada/acats/tests/cxa/cxa4028.a @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
line wrap: on
line source

-- CXA4028.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 Ada.Strings.Bounded procedures Append, Head, Tail, and 
--      Trim, and relational operator functions "=", ">", ">=", "<", "<=" 
--      with parameter combinations of type String and Bounded_String, 
--      produce correct results.
--
-- TEST DESCRIPTION:
--      This test examines the operation of several subprograms from within 
--      the Ada.Strings.Bounded package.  Four different instantiations of
--      Ada.Strings.Bounded.Generic_Bounded_Length provide packages defined
--      to manipulate bounded strings of lengths 1, 20, 40, and 80.
--      Examples of the above mentioned procedures and relational operators
--      from each of these instantiations are tested, with results compared
--      against expected output.
--      
--      Testing of the function versions of many of the subprograms tested
--      here is performed in tests CXA4006-CXA4009.
--      
--       
-- CHANGE HISTORY:
--      16 Feb 95   SAIC    Initial prerelease version
--      10 Mar 95   SAIC    Incorporated reviewer comments.
--      15 Apr 96   SAIC    Incorporated reviewer comments for ACVC 2.1.
--
--!

with Ada.Exceptions;
with Ada.Strings.Bounded;
with Report;

procedure CXA4028 is

begin

   Report.Test ("CXA4028", "Check that Ada.Strings.Bounded procedures "    &
                           "Append, Head, Tail, and Trim, and relational " &
                           "operator functions =, >, >=, <, <= with "      &
                           "parameter combinations of type String and "    &
                           "Bounded_String, produce correct results");

   Test_Block:
   declare

      use Ada.Exceptions;
      use Ada.Strings;

      -- Instantiations of Bounded String generic package.

      package BS1  is new Ada.Strings.Bounded.Generic_Bounded_Length(1);
      package BS20 is new Ada.Strings.Bounded.Generic_Bounded_Length(20);
      package BS40 is new Ada.Strings.Bounded.Generic_Bounded_Length(40);
      package BS80 is new Ada.Strings.Bounded.Generic_Bounded_Length(80);

      use type BS1.Bounded_String,  BS20.Bounded_String, 
               BS40.Bounded_String, BS80.Bounded_String;

      String_1   : String(1..1)  := "A";
      String_20  : String(1..20) := "ABCDEFGHIJKLMNOPQRST";
      String_40  : String(1..40) := "abcdefghijklmnopqrst" & String_20;
      String_80  : String(1..80) := String_40 & String_40;

      BString_1  : BS1.Bounded_String  := BS1.Null_Bounded_String;
      BString_20 : BS20.Bounded_String := BS20.Null_Bounded_String;
      BString_40 : BS40.Bounded_String := BS40.Null_Bounded_String;
      BString_80 : BS80.Bounded_String := BS80.Null_Bounded_String;

   begin

      -- Procedure Append.

      declare
         use BS1, BS20;
      begin
         Append(Source => BString_1, New_Item => To_Bounded_String("A"));
         Append(BString_1, "B", Ada.Strings.Left);
         Append(BString_1, 'C', Drop => Ada.Strings.Right); -- Drop appended
                                                            -- character.
         if BString_1 /= To_Bounded_String("B") then
            Report.Failed("Incorrect results from BS1 versions of " &
                          "procedure Append");
         end if;

         Append(BString_20, 'T');                      -- Character.
         Append(BString_20, "his string");             -- String.
         Append(BString_20, 
                To_Bounded_String(" is complete."),    -- Bounded string.
                Drop => Ada.Strings.Right);            -- Drop 4 characters.

         if BString_20 /= To_Bounded_String("This string is compl") then
            Report.Failed("Incorrect results from BS20 versions of " &
                          "procedure Append");
         end if;
      end;


      -- Operator "=".

      BString_40 := BS40.To_Bounded_String(String_40);
      BString_80 := BS80.To_Bounded_String(
                           BS40.To_String(BString_40) &
                           BS40.To_String(BString_40));

      if not (BString_40 = String_40 and         -- (Bounded_String, String)
              BS80."="(String_80, BString_80))   -- (String, Bounded_String)
      then
         Report.Failed("Incorrect results from function ""="" with " &
                       "string - bounded string parameter combinations");
      end if;


      -- Operator "<". 

      BString_1  := BS1.To_Bounded_String("cat",         -- string "c" only.
                                          Drop => Ada.Strings.Right);
      BString_20 := BS20.To_Bounded_String("Santa Claus");

      if BString_1 < "C"        or               -- (Bounded_String, String)
         BS1."<"(BString_1,"c") or               -- (Bounded_String, String)
         "x"  < BString_1       or               -- (String, Bounded_String)
         BString_20 < "Santa "  or               -- (Bounded_String, String)
         "Santa and his Elves" < BString_20      -- (String, Bounded_String)
      then
         Report.Failed("Incorrect results from function ""<"" with " &
                       "string - bounded string parameter combinations");
      end if;


      -- Operator "<=". 

      BString_20 := BS20.To_Bounded_String("Sample string");

      if BString_20          <= "Sample strin"  or -- (Bounded_String, String)
         "sample string"     <= BString_20      or -- (String, Bounded_String)
         not("Sample string" <= BString_20)        -- (String, Bounded_String)
      then
         Report.Failed("Incorrect results from function ""<="" with " &
                       "string - bounded string parameter combinations");
      end if;


      -- Operator ">". 

      BString_40 := BS40.To_Bounded_String("A MUCH LONGER SAMPLE STRING.");

      if BString_40 > "A much longer sample string"     or  -- (Bnd_Str, Str)
         String_20  > BS40.To_Bounded_String(String_40) or  -- (Str, Bnd_Str)
         BS40.To_Bounded_String("ABCDEFGH") > "abcdefgh"    -- (Str, Bnd_Str)
      then
         Report.Failed("Incorrect results from function "">"" with " &
                       "string - bounded string parameter combinations");
      end if;


      -- Operator ">=". 

      BString_80 := BS80.To_Bounded_String(String_80);

      if not (BString_80 >= String_80  and 
              BS80.To_Bounded_String("Programming") >= "PROGRAMMING" and
              "test" >= BS80.To_Bounded_String("tess"))
      then
         Report.Failed("Incorrect results from function "">="" with " &
                       "string - bounded string parameter combinations");
      end if;


      -- Procedure Trim

      BString_20 := BS20.To_Bounded_String("      Left Spaces  ");
      BS20.Trim(Source => BString_20, 
                Side   => Ada.Strings.Left);

      if "Left Spaces  " /= BString_20 then
         Report.Failed("Incorrect results from Procedure Trim with " &
                       "Side = Left");
      end if;

      BString_40 := BS40.To_Bounded_String("    Right Spaces    ");
      BS40.Trim(BString_40, Side => Ada.Strings.Right);

      if BString_40 /= "    Right Spaces" then
         Report.Failed("Incorrect results from Procedure Trim with " &
                       "Side = Right");
      end if;

      BString_20 := BS20.To_Bounded_String("   Both Sides      ");
      BS20.Trim(BString_20, Ada.Strings.Both);

      if BString_20 /= BS20.To_Bounded_String("Both Sides") then
         Report.Failed("Incorrect results from Procedure Trim with " &
                       "Side = Both");
      end if;

      BString_80 := BS80.To_Bounded_String("Centered    Spaces");
      BS80.Trim(BString_80, Ada.Strings.Both);

      if BString_80 /= BS80.To_Bounded_String("Centered    Spaces") then
         Report.Failed("Incorrect results from Procedure Trim with " &
                       "no blank spaces on the ends of the string");
      end if;


      -- Procedure Head

      BString_40 := BS40.To_Bounded_String("Test String");
      BS40.Head(Source => BString_40,
                Count  => 4);                       -- Count < Source'Length

      if BString_40 /= BS40.To_Bounded_String("Test") then
         Report.Failed("Incorrect results from Procedure Head with " &
                       "the Count parameter less than Source'Length");
      end if;

      BString_1 := BS1.To_Bounded_String("X");
      BS1.Head(BString_1, BS1.Length(BString_1));   -- Count = Source'Length

      if BString_1 /= "X" then
         Report.Failed("Incorrect results from Procedure Head with " &
                       "the Count parameter equal to Source'Length");
      end if;

      BString_20 := BS20.To_Bounded_String("Sample string");
      BS20.Head(BString_20, 
                Count => BS20.Max_Length,           -- Count > Source'Length
                Pad => '*');

      if BString_20 /= BS20.To_Bounded_String("Sample string*******") then
         Report.Failed("Incorrect results from Procedure Head with "    &
                       "the Count parameter greater than Source'Length");
      end if;

      BString_20 := BS20.To_Bounded_String("Twenty Characters 20");
      BS20.Head(BString_20, 22, Pad => '*', Drop => Ada.Strings.Left);

      if BString_20 /= "enty Characters 20**" then
         Report.Failed("Incorrect results from Procedure Head with "      &
                       "the Count parameter greater than Source'Length, " &
                       "and the Drop parameter = Left");
      end if;

      BString_20 := BS20.To_Bounded_String("Short String");
      BS20.Head(BString_20, 23, '-', Ada.Strings.Right);

      if ("Short String--------") /= BString_20 then
         Report.Failed("Incorrect results from Procedure Head with " &
                       "the Count parameter greater than Source'Length, " &
                       "and the Drop parameter = Right");
      end if;


      -- Procedure Tail

      BString_40 := BS40.To_Bounded_String("Test String");
      BS40.Tail(Source => BString_40,
                Count  => 6);                       -- Count < Source'Length

      if BString_40 /= BS40.To_Bounded_String("String") then
         Report.Failed("Incorrect results from Procedure Tail with " &
                       "the Count parameter less than Source'Length");
      end if;

      BString_1 := BS1.To_Bounded_String("X");
      BS1.Tail(BString_1, BS1.Length(BString_1));   -- Count = Source'Length

      if BString_1 /= "X" then
         Report.Failed("Incorrect results from Procedure Tail with " &
                       "the Count parameter equal to Source'Length");
      end if;

      BString_20 := BS20.To_Bounded_String("Sample string");
      BS20.Tail(BString_20, 
                Count => BS20.Max_Length,           -- Count > Source'Length
                Pad => '*');

      if BString_20 /= BS20.To_Bounded_String("*******Sample string") then
         Report.Failed("Incorrect results from Procedure Tail with "    &
                       "the Count parameter greater than Source'Length");
      end if;

      BString_20 := BS20.To_Bounded_String("Twenty Characters");  -- Len = 17
      BS20.Tail(BString_20, 22, Pad => '*', Drop => Ada.Strings.Left);

      if BString_20 /= "***Twenty Characters" then
         Report.Failed("Incorrect results from Procedure Tail with "      &
                       "the Count parameter greater than Source'Length, " &
                       "and the Drop parameter = Left");
      end if;

      BString_20 := BS20.To_Bounded_String("Maximum Length Chars");
      BS20.Tail(BString_20, 23, '-', Ada.Strings.Right);

      if ("---Maximum Length Ch") /= BString_20 then
         Report.Failed("Incorrect results from Procedure Tail with " &
                       "the Count parameter greater than Source'Length, " &
                       "and the Drop parameter = Right");
      end if;

   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 CXA4028;