home *** CD-ROM | disk | FTP | other *** search
- with DYN;
- use DYN;
- with TEXT_IO;
- use TEXT_IO;
- procedure DYNTEST is
- ------------------------------------------------------------------------
- -- This is a test program for the package DYN. It is intended to be --
- -- "fairly" exhaustive but not laborious. --
- ------------------------------------------------------------------------
- -- 10 Feb 86 - Initial preparation. R.G. Cleaveland Telesoft 1.5 --
- -- 12 Feb 86 - Ported to Verdix VAX ULTRIX version 5.1 --
- -- --
- -- --
- -- --
- ------------------------------------------------------------------------
- S : STRING(1..MAX_D_STRING_LENGTH);
- D1,D2,D3 : DYN_STRING;
- IS_AN_ERROR : BOOLEAN;
- procedure FAILURE(N: in natural) is
- begin
- NEW_LINE;
- PUT("Failure of test ");
- PUT(INTEGER'IMAGE(N));
- NEW_LINE;
- PUT("D1:");
- PUT_LINE(STR(D1));
- PUT("D2:");
- PUT_LINE(STR(D2));
- PUT("D3:");
- PUT_LINE(STR(D3));
- end FAILURE;
- begin
- -- preparations
- for I in 1..MAX_D_STRING_LENGTH loop
- S(I) := 'X';
- end loop;
- CLEAR(D1);
- CLEAR(D2);
- CLEAR(D3);
- -- Conversions between Ada strings and DYN_STRING:
- if STR(D_STRING("Short")) /= "Short" then
- FAILURE(1);
- else
- PUT("< 1>");
- end if;
- if STR(D_STRING("")) /= "" then
- FAILURE(2);
- else
- PUT("< 2>");
- end if;
- if STR(D_STRING(S)) /= S then
- FAILURE(3);
- else
- PUT("< 3>");
- end if;
- D1 := D_STRING("Test");
- CLEAR(D1);
- if STR(D1) /= "" then
- FAILURE(4);
- else
- PUT("< 4>");
- end if;
- -- tests LENGTH
- D1 := D_STRING("TEN..BYTES");
- if LENGTH(D1) /= 10 then
- FAILURE(5);
- else
- PUT("< 5>");
- end if;
- -- tests CONCATENATIOPN
- D2 := D1;
- D2 := D1 & D2;
- if STR(D2) /= "TEN..BYTESTEN..BYTES" then
- FAILURE(6);
- else
- PUT("< 6>");
- end if;
- D1 := D1 & D2;
- if LENGTH(D1) /= 30
- or LENGTH(D2) /= 20 then
- FAILURE(7);
- else
- PUT("< 7>");
- end if;
- CLEAR(D1);
- CLEAR(D2);
- D2 := D1 & D2;
- if LENGTH(D1) /= 0
- or LENGTH(D2) /= 0 then
- FAILURE(8);
- else
- PUT("< 8>");
- end if;
- IS_AN_ERROR := true;
- D1 := D_STRING(S);
- begin
- D1 := D1 & D_STRING('X');
- exception
- when CONSTRAINT_ERROR => IS_AN_ERROR := false;
- when others => null;
- end;
- if IS_AN_ERROR then
- FAILURE(9);
- else
- PUT("< 9>");
- end if;
-
- -- Making strings from integers
- D1 := D_STRING(0);
- D2 := D_STRING(INTEGER'LAST);
- D3 := D_STRING(INTEGER'FIRST);
- if STR(D1) /= " 0"
- or STR(D2) /= INTEGER'IMAGE(INTEGER'LAST)
- or STR(D3) /= INTEGER'IMAGE(INTEGER'FIRST) then
- FAILURE(10);
- PUT_LINE(INTEGER'image(INTEGER'last));
- PUT_LINE(INTEGER'image(INTEGER'first));
- else
- PUT("<10>");
- end if;
- D1 := D_STRING(1,12,'*');
- D2 := D_STRING(-1,12,'*');
- if STR(D1) /= " **********1"
- or STR(D2) /= "-**********1" then
- FAILURE(11);
- else
- PUT("<11>");
- end if;
- IS_AN_ERROR := true;
- D1 := D_STRING("XXX");
- begin
- D2 := D_STRING(10,2);
- exception
- when STRING_TOO_SHORT => IS_AN_ERROR := false;
- when others => null;
- end;
- if IS_AN_ERROR then
- FAILURE(12);
- else
- PUT("<12>");
- end if;
- -- Making strings from FLOAT types. This is a very casual test, and
- -- invites rigorous expansion.
- D1 := D_STRING(2.0, 2);
- if STR(D1) /= " 2.00" then
- FAILURE(13);
- else
- PUT("<13>");
- end if;
- -- testing INT
- if INT(D_STRING(INTEGER'last)) /= INTEGER'last
- or INT(D_STRING(INTEGER'first+1)) /= INTEGER'first+1 then
- ----------- above line modified to pass verdix 5.1 compiler-------
- FAILURE(14);
- else
- PUT("<14>");
- end if;
- -- testing FLT
- if FLT(D_STRING(2.0, 2)) /= 2.0 then
- FAILURE(15);
- else
- PUT("<15>");
- end if;
- -- Testing SUBSTITUTE
- D1 := D_STRING("123");
- SUBSTITUTE(D1,1,'X');
- SUBSTITUTE(D1,2,'Y');
- SUBSTITUTE(D1,3,'Z');
- SUBSTITUTE(D1,4,'%');
- if STR(D1) /= "XYZ%" then
- FAILURE(16);
- else
- PUT("<16>");
- end if;
- IS_AN_ERROR := true;
- begin
- SUBSTITUTE(D1,MAX_D_STRING_LENGTH+1,'X');
- exception
- when CONSTRAINT_ERROR => IS_AN_ERROR := false;
- when others => null;
- end;
- if IS_AN_ERROR then
- FAILURE(17);
- else
- PUT("<17>");
- end if;
- -- test equality
- D2 := D_STRING(S);
- D1 := D_STRING("abc");
- D2 := SUBSTRING(D1,1,3);
- if EQUALS(D1, D2) then
- PUT("<18>");
- else
- FAILURE(18);
- end if;
- -- test inequality
- D2 := D_STRING("abd");
- if D2 <= D1 then
- FAILURE(19);
- else
- PUT("<19>");
- end if;
- -- test INDEX
- D1 := D_STRING("ABAAABCAAABC");
- if INDEX(D1,D_STRING("0"), 1) /= 0
- or INDEX(D1,D_STRING("A"), 1) /= 1
- or INDEX(D1,D_STRING("B"), 1) /= 2
- or INDEX(D1,D_STRING("A"), 2) /= 3
- or INDEX(D1,D_STRING("BC"), 1) /= 6
- or INDEX(D1,D_STRING("BC"), 6) /= 6
- or INDEX(D1,D_STRING("BC"), 7) /= 11
- or INDEX(D1,D_STRING("ABC"), 1) /= 5
- or INDEX(D1,D_STRING("ABAAABCAAABCA"), 1) /= -1 then
- FAILURE(20);
- else
- PUT("<20>");
- end if;
- -- test RINDEX
- D1 := D_STRING("ABAAABCAAABC");
- if RINDEX(D1,D_STRING("0"), 12) /= 0
- or RINDEX(D1,D_STRING("A"), 2) /= 1
- or RINDEX(D1,D_STRING("B"), 12) /= 11
- or RINDEX(D1,D_STRING("A"), 11) /= 10
- or RINDEX(D1,D_STRING("BC"), 11) /= 11
- or RINDEX(D1,D_STRING("BC"), 10) /= 6
- or RINDEX(D1,D_STRING("BC"), 5) /= 0
- or RINDEX(D1,D_STRING("BA"),12) /= -1
- or RINDEX(D1,D_STRING("ABAAABCAAABCA"),12) /= -1 then
- FAILURE(21);
- else
- PUT("<21>");
- end if;
- -- test of UPPERCASE and CHAR
- if STR (UPPERCASE(D_STRING("ABC"))) /= "ABC"
- or STR (UPPERCASE(D_STRING("abc"))) /= "ABC"
- or CHAR(UPPERCASE(D_STRING(ASCII.NUL))) /= ASCII.NUL
- or CHAR(UPPERCASE(D_STRING(ASCII.DEL))) /= ASCII.DEL
- or STR (UPPERCASE(D_STRING("" ))) /= ""
- or STR (UPPERCASE(D_STRING(S ))) /= S
- or STR (UPPERCASE(D_STRING(" z~"))) /= " Z~" then
- FAILURE(22);
- else
- PUT("<22>");
- end if;
- -- test of RIGHT
- D1 := D_STRING("ABC");
- D2 := RIGHT(D1, 2);
- if STR(D2) /= "BC" then
- FAILURE(23);
- else
- PUT("<23>");
- end if;
- IS_AN_ERROR := true;
- begin
- D1 := RIGHT(D_STRING("ABC"),4);
- exception
- when CONSTRAINT_ERROR => IS_AN_ERROR := false;
- when others => null;
- end;
- if IS_AN_ERROR then
- FAILURE(24);
- else
- PUT("<24>");
- end if;
- NEW_LINE;
- PUT_LINE("Test completed.");
- end DYNTEST;
-