cxa4027.a

来自「linux下编程用 编译软件」· A 代码 · 共 343 行

A
343
字号
-- CXA4027.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 versions of Ada.Strings.Bounded subprograms Translate,--      (procedure and function), Index, and Count, which use the --      Maps.Character_Mapping_Function input parameter, produce correct --      results.---- TEST DESCRIPTION:--      This test examines the operation of several subprograms from within --      the Ada.Strings.Bounded package that use the --      Character_Mapping_Function mapping parameter to provide a mapping--      capability.--      --      Two functions are defined to provide the mapping.  Access values --      are defined to refer to these functions.  One of the functions will--      map upper case characters in the range 'A'..'Z' to their lower case--      counterparts, while the other function will map lower case characters--      ('a'..'z', or a character whose position is in one of the ranges --      223..246 or 248..255, provided the character has an upper case form)--      to their upper case form.--      --      Function Index uses the mapping function access value to map the input--      string prior to searching for the appropriate index value to return.--      Function Count uses the mapping function access value to map the input--      string prior to counting the occurrences of the pattern string.--      Both the Procedure and Function version of Translate use the mapping--      function access value to perform the translation.----      -- CHANGE HISTORY:--      16 FEB 95   SAIC    Initial prerelease version--      17 Jul 95   SAIC    Incorporated reviewer comments.  Replaced two --                          internally declared functions with two library--                          level functions to eliminate accessibility--                          problems.----!-- Function CXA4027_0 will return the lower case form of -- the character input if it is in upper case, and return the input-- character otherwise.with Ada.Characters.Handling;function CXA4027_0 (From : Character) return Character;function CXA4027_0 (From : Character) return Character isbegin   return Ada.Characters.Handling.To_Lower(From);end CXA4027_0;-- Function CXA4027_1 will return the upper case form of -- Characters in the range 'a'..'z', or whose position is in one-- of the ranges 223..246 or 248..255, provided the character has-- an upper case form.with Ada.Characters.Handling;function CXA4027_1 (From : Character) return Character;function CXA4027_1 (From : Character) return Character isbegin   return Ada.Characters.Handling.To_Upper(From);end CXA4027_1;with CXA4027_0, CXA4027_1;with Ada.Strings.Bounded;with Ada.Strings.Maps;with Ada.Characters.Handling;with Report;procedure CXA4027 isbegin   Report.Test ("CXA4027", "Check that Ada.Strings.Bounded subprograms "  &                           "Translate, Index, and Count, which use the "  &                           "Character_Mapping_Function input parameter, " &                           "produce correct results");   Test_Block:   declare      use Ada.Strings;      -- Functions used to supply mapping capability.      function Map_To_Lower_Case (From : Character) return Character         renames CXA4027_0;       function Map_To_Upper_Case (From : Character) return Character        renames CXA4027_1;       Map_To_Lower_Case_Ptr : Maps.Character_Mapping_Function :=                                Map_To_Lower_Case'Access;      Map_To_Upper_Case_Ptr : Maps.Character_Mapping_Function :=                                Map_To_Upper_Case'Access;      -- 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      -- Function Index.      if BS40.Index(BS40.To_Bounded_String("Package Strings.Bounded"),                    Pattern => "s.b",                    Going   => Ada.Strings.Forward,                    Mapping => Map_To_Lower_Case_Ptr)     /= 15  or         BS80.Index(BS80.To_Bounded_String("STRING TRANSLATIONS SUBPROGRAMS"),                    "tr",                    Mapping => Map_To_Lower_Case_Ptr)     /= 2   or         BS20.Index(BS20.To_Bounded_String("maximum number"),                    "um",                    Ada.Strings.Backward,                    Map_To_Lower_Case_Ptr)                /= 10  or         BS80.Index(BS80.To_Bounded_String("CoMpLeTeLy MiXeD CaSe StRiNg"),                    "MIXED CASE STRING",                    Ada.Strings.Forward,                    Map_To_Upper_Case_Ptr)                /= 12  or         BS40.Index(BS40.To_Bounded_String("STRING WITH NO MATCHING PATTERN"),                    "WITH",                    Ada.Strings.Backward,                    Map_To_Lower_Case_Ptr)                /= 0   or         BS80.Index(BS80.To_Bounded_String("THIS STRING IS IN UPPER CASE"),                    "I",                    Ada.Strings.Backward,                    Map_To_Upper_Case_Ptr)                /= 16  or         BS1.Index(BS1.Null_Bounded_String,                   "i",                   Mapping => Map_To_Lower_Case_Ptr)      /= 0   or         BS40.Index(BS40.To_Bounded_String("AAABBBaaabbb"),                    "aabb",                    Mapping => Map_To_Lower_Case_Ptr)     /= 2   or         BS80.Index(BS80.To_Bounded_String("WOULD MATCH BUT FOR THE CASE"),                    "WOULD MATCH BUT FOR THE CASE",                    Ada.Strings.Backward,                    Map_To_Lower_Case_Ptr)                /= 0      then         Report.Failed("Incorrect results from Function Index, using a " &                       "Character Mapping Function parameter");      end if;      -- Function Index, Pattern_Error if Pattern = Null_String      declare         use BS20;         TC_Natural : Natural := 1000;      begin         TC_Natural := Index(To_Bounded_String("A Valid String"),                              "",                             Ada.Strings.Forward,                             Map_To_Lower_Case_Ptr);         Report.Failed("Pattern_Error not raised by Function Index when " &                       "given a null pattern string");      exception         when Pattern_Error => null;   -- OK, expected exception.         when others        =>            Report.Failed("Incorrect exception raised by Function Index " &                          "using a Character_Mapping_Function parameter " &                          "when given a null pattern string");      end;      -- Function Count.      if BS20.Count(BS20.To_Bounded_String("ABABABA"),                     Pattern => "aba",                    Mapping => Map_To_Lower_Case_Ptr)        /=  2   or         BS20.Count(BS20.To_Bounded_String("ABABABA"),                    "ABA",                     Map_To_Lower_Case_Ptr)                   /=  0   or         BS40.Count(BS40.To_Bounded_String("This IS a MISmatched issue"),                    "is",                    Map_To_Lower_Case_Ptr)                   /=  4   or         BS80.Count(BS80.To_Bounded_String("ABABABA"),                     "ABA",                     Map_To_Upper_Case_Ptr)                   /=  2   or         BS40.Count(BS40.To_Bounded_String("This IS a MISmatched issue"),                    "is",                    Map_To_Upper_Case_Ptr)                   /=  0   or         BS80.Count(BS80.To_Bounded_String                           ("Peter Piper and his Pickled Peppers"),                    "p",                    Map_To_Lower_Case_Ptr)                   /=  7   or         BS20.Count(BS20.To_Bounded_String("She sells sea shells"),                    "s",                    Map_To_Upper_Case_Ptr)                   /=  0   or         BS80.Count(BS80.To_Bounded_String("No matches what-so-ever"),                    "matches",                    Map_To_Upper_Case_Ptr)                   /=  0      then         Report.Failed("Incorrect results from Function Count, using " &                       "a Character_Mapping_Function parameter");      end if;      -- Function Count, Pattern_Error if Pattern = Null_String      declare         use BS80;         TC_Natural : Natural := 1000;      begin         TC_Natural := Count(To_Bounded_String("A Valid String"),                              "",                             Map_To_Lower_Case_Ptr);         Report.Failed("Pattern_Error not raised by Function Count using " &                       "a Character_Mapping_Function parameter when "      &                       "given a null pattern string");      exception         when Pattern_Error => null;   -- OK, expected exception.         when others        =>            Report.Failed("Incorrect exception raised by Function Count " &                          "using a Character_Mapping_Function parameter " &                          "when given a null pattern string");      end;      -- Function Translate.      if BS40.Translate(BS40.To_Bounded_String("A Mixed Case String"),                        Mapping => Map_To_Lower_Case_Ptr) /=          BS40.To_Bounded_String("a mixed case string")      or         BS20."/="(BS20.Translate(BS20.To_Bounded_String("ALL LOWER CASE"),                                  Map_To_Lower_Case_Ptr),                   "all lower case")                        or         BS20."/="("end with lower case",                   BS20.Translate(                     BS20.To_Bounded_String("end with lower case"),                     Map_To_Lower_Case_Ptr))                or         BS1.Translate(BS1.Null_Bounded_String,                        Map_To_Lower_Case_Ptr)             /=         BS1.Null_Bounded_String                            or         BS80."/="(BS80.Translate(BS80.To_Bounded_String                          ("start with lower case, end with upper case"),                        Map_To_Upper_Case_Ptr),                   "START WITH LOWER CASE, END WITH UPPER CASE") or         BS40.Translate(BS40.To_Bounded_String("ALL UPPER CASE STRING"),                        Map_To_Upper_Case_Ptr)            /=         BS40.To_Bounded_String("ALL UPPER CASE STRING")    or         BS80."/="(BS80.Translate(BS80.To_Bounded_String                          ("LoTs Of MiXeD CaSe ChArAcTeRs In ThE StRiNg"),                          Map_To_Upper_Case_Ptr),                   "LOTS OF MIXED CASE CHARACTERS IN THE STRING")      then         Report.Failed("Incorrect results from Function Translate, using " &                       "a Character_Mapping_Function parameter");      end if;      -- Procedure Translate.      BString_1 := BS1.To_Bounded_String("A");      BS1.Translate(Source => BString_1, Mapping => Map_To_Lower_Case_Ptr);      if not BS1."="(BString_1, "a") then    -- "=" for Bounded_String, String         Report.Failed("Incorrect result from Procedure Translate - 1");      end if;      BString_20 := BS20.To_Bounded_String(String_20);      BS20.Translate(BString_20, Mapping => Map_To_Lower_Case_Ptr);      if BString_20 /= BS20.To_Bounded_String("abcdefghijklmnopqrst") then         Report.Failed("Incorrect result from Procedure Translate - 2");      end if;      BString_40 := BS40.To_Bounded_String("String needing highlighting");      BS40.Translate(BString_40, Map_To_Upper_Case_Ptr);      if not (BString_40 = "STRING NEEDING HIGHLIGHTING") then         Report.Failed("Incorrect result from Procedure Translate - 3");      end if;      BString_80 := BS80.Null_Bounded_String;      BS80.Translate(BString_80, Map_To_Upper_Case_Ptr);      if not (BString_80 = BS80.Null_Bounded_String) then         Report.Failed("Incorrect result from Procedure Translate - 4");      end if;   exception      when others => Report.Failed ("Exception raised in Test_Block");   end Test_Block;   Report.Result;end CXA4027;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?