| -- |
| -- C352001.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 predefined Character type comprises 256 positions. |
| -- Check that the names of the non-graphic characters are usable with |
| -- the attributes (Wide_)Image and (Wide_)Value, and that these |
| -- attributes produce the correct result. |
| -- |
| -- TEST DESCRIPTION: |
| -- Build two tables of nongraphic characters from positions of Row 00 |
| -- (0000-001F and 007F-009F) of the ISO 10646 Basic Multilingual Plane. |
| -- Fill the first table with compiler created strings. Fill the second |
| -- table with strings defined by the language. Compare the two tables. |
| -- Check 256 positions of the predefined character type. Use attributes |
| -- (Wide_)Image and (Wide_)Value to check the values of the non-graphic |
| -- characters and the last 2 characters. |
| -- |
| -- |
| -- CHANGE HISTORY: |
| -- 20 Jun 95 SAIC Initial prerelease version. |
| -- 27 Jan 96 SAIC Revised for 2.1. Hid values, added "del" case. |
| -- |
| --! |
| |
| with Ada.Characters.Handling; |
| with Report; |
| procedure C352001 is |
| |
| Lower_Bound : Integer := 0; |
| Middle_Bound : Integer := 31; |
| Upper_Bound : Integer := 159; |
| Half_Bound : Integer := 127; |
| Max_Bound : Integer := 255; |
| |
| type Dyn_String is access String; |
| type Value_Result is array (Character) of Dyn_String; |
| |
| Table_Of_Character : Value_Result; |
| TC_Table : Value_Result; |
| |
| function CVII(K : Natural) return Character is |
| begin |
| return Character'Val( Report.Ident_Int(K) ); |
| end CVII; |
| |
| function "=" (L, R : String) return Boolean is |
| UCL : String (L'First .. L'Last); |
| UCR : String (R'First .. R'last); |
| begin |
| UCL := Ada.Characters.Handling.To_Upper (L); |
| UCR := Ada.Characters.Handling.To_Upper (R); |
| if UCL'Last /= UCR'Last then |
| return False; |
| else |
| for I in UCL'First .. UCR'Last loop |
| if UCL (I) /= UCR (I) then |
| return False; |
| end if; |
| end loop; |
| return True; |
| end if; |
| end "="; |
| |
| begin |
| |
| Report.Test ("C352001", "Check that, the predefined Character type " & |
| "comprises 256 positions. Check that the names of the " & |
| "non-graphic characters are usable with the attributes " & |
| "(Wide_)Image and (Wide_)Value, and that these attributes " & |
| "produce the correct result"); |
| |
| -- Fill table with strings (positions of Row 00 (0000-001F) of the ISO |
| -- 10646 Basic Multilingual Plane created by the compiler. |
| |
| for I in CVII(Lower_Bound) .. CVII(Middle_Bound) loop |
| Table_Of_Character (I) := new String'(Character'Image(I)); |
| end loop; |
| |
| -- Fill table with strings (positions of Row 00 (007F-009F) of the ISO |
| -- 10646 Basic Multilingual Plane created by the compiler. |
| |
| for I in CVII(Half_Bound) .. CVII(Upper_Bound) loop |
| Table_Of_Character (I) := new String'(Character'Image(I)); |
| end loop; |
| |
| -- Fill table with strings (positions of Row 00 (0000-001F) of the ISO |
| -- 10646 Basic Multilingual Plane defined by the language. |
| |
| TC_Table (CVII(0)) := new String'("nul"); |
| TC_Table (CVII(1)) := new String'("soh"); |
| TC_Table (CVII(2)) := new String'("stx"); |
| TC_Table (CVII(3)) := new String'("etx"); |
| TC_Table (CVII(4)) := new String'("eot"); |
| TC_Table (CVII(5)) := new String'("enq"); |
| TC_Table (CVII(6)) := new String'("ack"); |
| TC_Table (CVII(7)) := new String'("bel"); |
| TC_Table (CVII(8)) := new String'("bs"); |
| TC_Table (CVII(9)) := new String'("ht"); |
| TC_Table (CVII(10)) := new String'("lf"); |
| TC_Table (CVII(11)) := new String'("vt"); |
| TC_Table (CVII(12)) := new String'("ff"); |
| TC_Table (CVII(13)) := new String'("cr"); |
| TC_Table (CVII(14)) := new String'("so"); |
| TC_Table (CVII(15)) := new String'("si"); |
| TC_Table (CVII(16)) := new String'("dle"); |
| TC_Table (CVII(17)) := new String'("dc1"); |
| TC_Table (CVII(18)) := new String'("dc2"); |
| TC_Table (CVII(19)) := new String'("dc3"); |
| TC_Table (CVII(20)) := new String'("dc4"); |
| TC_Table (CVII(21)) := new String'("nak"); |
| TC_Table (CVII(22)) := new String'("syn"); |
| TC_Table (CVII(23)) := new String'("etb"); |
| TC_Table (CVII(24)) := new String'("can"); |
| TC_Table (CVII(25)) := new String'("em"); |
| TC_Table (CVII(26)) := new String'("sub"); |
| TC_Table (CVII(27)) := new String'("esc"); |
| TC_Table (CVII(28)) := new String'("fs"); |
| TC_Table (CVII(29)) := new String'("gs"); |
| TC_Table (CVII(30)) := new String'("rs"); |
| TC_Table (CVII(31)) := new String'("us"); |
| TC_Table (CVII(127)) := new String'("del"); |
| |
| -- Fill table with strings (positions of Row 00 (007F-009F) of the ISO |
| -- 10646 Basic Multilingual Plane defined by the language. |
| |
| TC_Table (CVII(128)) := new String'("reserved_128"); |
| TC_Table (CVII(129)) := new String'("reserved_129"); |
| TC_Table (CVII(130)) := new String'("bph"); |
| TC_Table (CVII(131)) := new String'("nbh"); |
| TC_Table (CVII(132)) := new String'("reserved_132"); |
| TC_Table (CVII(133)) := new String'("nel"); |
| TC_Table (CVII(134)) := new String'("ssa"); |
| TC_Table (CVII(135)) := new String'("esa"); |
| TC_Table (CVII(136)) := new String'("hts"); |
| TC_Table (CVII(137)) := new String'("htj"); |
| TC_Table (CVII(138)) := new String'("vts"); |
| TC_Table (CVII(139)) := new String'("pld"); |
| TC_Table (CVII(140)) := new String'("plu"); |
| TC_Table (CVII(141)) := new String'("ri"); |
| TC_Table (CVII(142)) := new String'("ss2"); |
| TC_Table (CVII(143)) := new String'("ss3"); |
| TC_Table (CVII(144)) := new String'("dcs"); |
| TC_Table (CVII(145)) := new String'("pu1"); |
| TC_Table (CVII(146)) := new String'("pu2"); |
| TC_Table (CVII(147)) := new String'("sts"); |
| TC_Table (CVII(148)) := new String'("cch"); |
| TC_Table (CVII(149)) := new String'("mw"); |
| TC_Table (CVII(150)) := new String'("spa"); |
| TC_Table (CVII(151)) := new String'("epa"); |
| TC_Table (CVII(152)) := new String'("sos"); |
| TC_Table (CVII(153)) := new String'("reserved_153"); |
| TC_Table (CVII(154)) := new String'("sci"); |
| TC_Table (CVII(155)) := new String'("csi"); |
| TC_Table (CVII(156)) := new String'("st"); |
| TC_Table (CVII(157)) := new String'("osc"); |
| TC_Table (CVII(158)) := new String'("pm"); |
| TC_Table (CVII(159)) := new String'("apc"); |
| |
| |
| -- Compare the first half of two tables. |
| for I in CVII(Lower_Bound) .. CVII(Middle_Bound) loop |
| if TC_Table(I).all /= Table_Of_Character(I).all then |
| Report.Failed("Value of character#" & Integer'Image(Character'Pos(I)) & |
| " is not the same in the first half of the table"); |
| end if; |
| end loop; |
| |
| |
| -- Compare the second half of two tables. |
| for I in CVII(Half_Bound) .. CVII(Upper_Bound) loop |
| if TC_Table(I).all /= Table_Of_Character(I).all then |
| Report.Failed("Value of character#" & Integer'Image(Character'Pos(I)) & |
| " is not the same in the second half of the table"); |
| end if; |
| end loop; |
| |
| |
| -- Check the first character. |
| if Character'Image( Character'First ) /= "NUL" then |
| Report.Failed("Value of character#" & |
| Integer'Image(Character'Pos (Character'First)) & |
| " is not NUL"); |
| end if; |
| |
| |
| -- Check that the names of the non-graphic characters are usable with |
| -- Image and Value attributes. |
| if Character'Value( Character'Image( CVII(153) )) /= |
| CVII( 153 ) then |
| Report.Failed ("Value of character#" & |
| Integer'Image( Character'Pos(CVII(153)) ) & |
| " is not reserved_153"); |
| end if; |
| |
| |
| for I in CVII(Lower_Bound) .. CVII(Max_Bound) loop |
| if Character'Value( |
| Report.Ident_Str( |
| Character'Image(CVII(Character'Pos(I))))) |
| /= CVII( Character'Pos(I)) then |
| Report.Failed ("Value of character#" & |
| Integer'Image( Character'Pos(I) ) & |
| " is not the same as the predefined character type"); |
| end if; |
| end loop; |
| |
| |
| -- Check Wide_Character attributes. |
| for I in Wide_Character'Val(Lower_Bound) .. Wide_Character'Val(Max_Bound) |
| loop |
| if Wide_Character'Wide_Value( |
| Report.Ident_Wide_Str( |
| Wide_Character'Wide_Image( |
| Wide_Character'Val(Wide_Character'Pos(I))))) |
| /= Wide_Character'Val(Wide_Character'Pos(I)) |
| then |
| Report.Failed ("Value of the predefined Wide_Character type " & |
| "is not correct"); |
| end if; |
| end loop; |
| |
| |
| if Wide_Character'Value( Wide_Character'Image(Wide_Character'Val(132)) ) |
| /= Wide_Character'Val( Report.Ident_Int(132) ) then |
| Report.Failed ("Wide_Character at 132 is not reserved_132"); |
| end if; |
| |
| |
| if Wide_Character'Image( Wide_Character'First ) /= "NUL" then |
| Report.Failed ("Wide_Character'First is not NUL"); |
| end if; |
| |
| |
| if Wide_Character'Image |
| (Wide_Character'Pred (Wide_Character'Last) ) /= "FFFE" then |
| Report.Failed ("Wide_Character at 65534 is not FFFE"); |
| end if; |
| |
| |
| if Wide_Character'Image(Wide_Character'Last) /= "FFFF" then |
| Report.Failed ("Wide_Character'Last is not FFFF"); |
| end if; |
| |
| Report.Result; |
| |
| end C352001; |