Added headers
[tpot/pegasus/.git] / src / Pegasus / Common / tests / String / String.cpp
index 01863c9924cee81031a89a488536c38ae1275da9..6d222440e2acdeaab796b365691beed82903d563 100644 (file)
-//%/////////////////////////////////////////////////////////////////////////////
-//
-// Copyright (c) 2000 The Open Group, BMC Software, Tivoli Systems, IBM
-//
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-//
-//==============================================================================
-//
-// Author: Mike Brasher (mbrasher@bmc.com)
-//
-// Modified By:
-//
-//%/////////////////////////////////////////////////////////////////////////////
-//%/////////////////////////////////////////////////////////////////////////////
-//
-// Copyright (c) 2000 The Open Group, BMC Software, Tivoli Systems, IBM
-//
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-//
-//==============================================================================
-//
-// Author: Mike Brasher (mbrasher@bmc.com)
-//
-// Modified By:
-//
-//%/////////////////////////////////////////////////////////////////////////////
-
-
-#include <cassert>
-#include <strstream>
-#include <Pegasus/Common/String.h>
-
-PEGASUS_USING_PEGASUS;
-PEGASUS_USING_STD;
-#include <Pegasus/Common/Exception.h>
-
-static void TestSplit()
-{
-    {
-       String line = " a       b \"c d e\" fff  \"\"   gggg";
-       Array<String> fields;
-       String::split(line, fields);
-       assert(fields.size() == 6);
-       assert(fields[0] == "a");
-       assert(fields[1] == "b");
-       assert(fields[2] == "c d e");
-       assert(fields[3] == "fff");
-       assert(fields[4] == "");
-       assert(fields[5] == "gggg");
-    }
-
-    {
-       String line = "";
-       Array<String> fields;
-       String::split(line, fields);
-       assert(fields.size() == 0);
-    }
-
-    {
-       String line = "hello";
-       Array<String> fields;
-       String::split(line, fields);
-       assert(fields.size() == 1);
-       assert(fields[0] == "hello");
-    }
-
-    {
-       String line;
-       Array<String> fields;
-       fields.append("one");
-       fields.append("two \"three\" four");
-       fields.append("five");
-       String::join(fields, line);
-       Boolean result = line == "one \"two \\\"three\\\" four\" five";
-       assert(result);
-
-       fields.clear();
-       String::split(line, fields);
-       assert(fields.size() == 3);
-       assert(fields[0] == "one");
-       result = fields[1] == "two \"three\" four";
-       assert(result);
-       assert(fields[2] == "five");
-    }
-
-    {
-    Array<String> fields;
-    fields.append("./associations.txt");
-    fields.append("A.left=\"x.key=\\\"one\\\"\",right=\"y.key=\\\"two\\\"\"");
-    fields.append("A");
-    fields.append("X.key=\"one\"");
-    fields.append("X");
-    fields.append("left");
-    fields.append("Y");
-    fields.append("right");
-    fields.append("Y.key=\"two\"");
-
-    String line;
-    String::join(fields, line);
-
-    Array<String> tmpFields;
-    String::split(line, tmpFields);
-
-    assert(tmpFields.size() == fields.size());
-    for (Uint32 i = 0; i < fields.size(); i++)
-       assert(fields[i] == tmpFields[i]);
-    }
-}
-
-int main()
-{
-    String s1 = "Hello World";
-    String s2 = s1;
-    String s3(s2);
-
-    assert(String::equal(s1, s3));
-
-    // Test append characters to String
-    String s4 = "Hello";
-    s4.append(Char16(0x0000));
-    s4.append(Char16(0x1234));
-    s4.append(Char16(0x5678));
-    s4.append(Char16(0x9cde));
-    s4.append(Char16(0xffff));
-
-    {
-       ostrstream os;
-       os << s4;
-       os.put('\0');
-       const char EXPECTED[] = "Hello\\x0000\\x1234\\x5678\\x9CDE\\xFFFF";
-       char* tmp = os.str();
-       assert(strcmp(EXPECTED, tmp) == 0);
-       delete [] tmp;
-    }
-
-    {
-       // Test allocateCString
-       const char STR0[] = "one two three four";
-       String s = STR0;
-       char* tmp = s.allocateCString();
-       assert(strcmp(tmp, STR0) == 0);
-       const char STR1[] = "zero ";
-       delete [] tmp;
-    }
-
-    {
-       // Test appendToCString 
-       const char STR0[] = "one two three four";
-       String s = STR0;
-       const char STR1[] = "zero ";
-       char* tmp = new char[strlen(STR1) + s.size() + 1];
-       strcpy(tmp, STR1);
-       s.appendToCString(tmp);
-       assert(strcmp(tmp, "zero one two three four") == 0);
-       delete [] tmp;
-    }
-
-    {
-       // Test appendToCString with length parameter
-       const char STR0[] = "one two three four";
-       String s = STR0;
-       const char STR1[] = "zero ";
-       char* tmp = new char[strlen(STR1) + s.size() + 1];
-       strcpy(tmp, STR1);
-       s.appendToCString(tmp, 7);
-       assert(strcmp(tmp, "zero one two") == 0);
-       delete [] tmp;
-    }
-
-    {
-       // Test remove
-       String s = "abcdefg";
-       s.remove(3, 3);
-       assert(String::equal(s, "abcg"));
-       assert(s.size() == 4);
-
-       s = "abcdefg";
-       s.remove(3, 4);
-       assert(String::equal(s, "abc"));
-       assert(s.size() == 3);
-
-       s = "abcdefg";
-       s.remove(3);
-       assert(String::equal(s, "abc"));
-       assert(s.size() == 3);
-
-       s = "abc";
-       s.remove(3);
-       assert(String::equal(s, "abc"));
-       assert(s.size() == 3);
-
-       s = "abc";
-       s.remove(0);
-       assert(String::equal(s, ""));
-       assert(s.size() == 0);
-
-       s = "abc";
-       s.remove(0, 1);
-       assert(String::equal(s, "bc"));
-       assert(s.size() == 2);
-
-       String t1 = "HELLO";
-       String t2 = ToLower(t1);
-       assert(String::equal(t1, "HELLO"));
-       assert(String::equal(t2, "hello"));
-    }
-
-    // Test of the different overload operators
-    {
-       // test the append  overload operator +=;
-       String t1 = "one";
-       t1 += " two";
-       assert(String::equal(t1, "one two"));
-       t1 += ' ';
-       t1 += 't';
-       t1 += 'h';
-       t1 += 'r';
-       t1 += "ee";
-       assert(String::equal(t1,"one two three"));
-       
-       // used as example in Doc.
-       String test = "abc";
-       test += "def";
-       assert(test == "abcdef");
-    }
-
-    {
-       // Test the == overload operator
-       String t1 = "one";
-       String t2 = "one";
-       assert(t1 == "one");
-       assert("one" == t1);
-       assert(t1 == t2);
-       assert(t2 == t1);
-       assert(String("one") == "one");
-
-       const char STR0[] = "one two three four";
-       String s = STR0;
-       char* tmp = s.allocateCString();
-       assert(tmp == s);
-       assert(s == tmp);
-       delete [] tmp;
-    }
-
-    {
-       // Tests of the + Overload operator
-       String t1 = "abc";
-       String t2 = t1 + t1;
-       assert(t2 == "abcabc");
-       t1 = "abc";
-       t2 = t1 + "def";
-       assert(t2 == "abcdef");
-
-       t1 = "ghi";
-       assert(t1 == "ghi");
-
-       // ATTN: the following fails because there
-       // is no single character overload operator
-       // KS: Apr 2001
-       // t2 = t1 + 'k' + 'l' + 'm' + "nop";
-       t2 = t1 + "k" + "l" + "m" + "nop";
-       assert(t2 == "ghiklmnop");
-       assert(String::equal(t2,"ghiklmnop"));
-
-       // add tests for != operator.
-
-       t1 = "abc";
-       assert(t1 != "ghi");
-       assert(t1 != t2);
-
-       // add tests for other compare operators
-
-       // Operater <
-       t1 = "ab";
-       t2 = "cde";
-       assert(t1 < t2);
-       assert(t1 <= t2);
-       assert(t2 > t1);
-       assert(t2 >=t1);
-       t2 = t1;
-       assert(t1 <= t2);
-       assert(t1 >= t2);
-
-       // comparison and equals
-       // the compare is for null term strings.
-       // Therefore following does not work
-       // the compare operators cover the problem
-       // for String objects.
-       // assert(String::compare(t1,t2) == -1);
-
-
-       // Tests for compare with same length
-       t1 = "abc";
-       t2 = "def";
-       assert(t1 < t2);
-
-       // comparison and equals
-       // compare is for null term strings
-       // therefore following does not work.
-       //assert(String::compare(t1,t2) == -1); 
-    }
-
-    {
-       // Test of the [] operator
-       String t1 = "abc";
-       Char16 c = t1[1];
-       // note c is Char16
-       assert(c == 'b');
-
-       //ATTN: test for outofbounds exception
-       try
-       {
-           c = t1[200];
-       }
-       catch (OutOfBounds&)
-       {
-       assert(true);
-       }
-    }
-
-    {
-       // Test the find function
-       String t1 = "abcdef";
-       String t2 = "cde";
-       String t3 = "xyz";
-       String t4 = "abc";
-       String t5 = "abd";
-       String t6 = "defg";
-       assert(t1.find('c') == 2);
-       assert(t1.find(t2)==2);
-       assert(t1.find(t3)==(Uint32)-1);
-       assert(t1.find(t4)==0);
-       assert(t1.find(t5)==(Uint32)-1);
-       assert(t1.find(t6)==(Uint32)-1);
-       assert(t1.find("cde")==2);
-       assert(t1.find("def")==3);
-       assert(t1.find("xyz")==(Uint32)-1);
-       assert(t1.find("a") ==0);
-
-       // test for the case where string
-       // partly occurs and then later
-       // completely occurs
-        String s = "this is an apple";
-       assert(s.find("apple")==11);
-       assert(s.find("appld")==(Uint32)-1);
-       assert(s.find("this")==0);
-       assert(s.find("t")==0);
-       assert(s.find("e")==15);
-       s = "a";
-       assert(s.find("b")==(Uint32)-1);
-       assert(s.find("a")==0);
-       assert(s.find(s)==0);
-       s = "aaaapple";
-       assert(s.find("apple")==3);
-
-       {
-           String nameSpace = "a#b#c";
-           nameSpace.translate('#', '/');
-           assert(nameSpace == "a/b/c");
-       }
-
-       TestSplit();
-    }
-
-
-    cout << "+++++ passed all tests" << endl;
-
-    return 0;
-}
+//%/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Copyright (c) 2000, 2001 The Open group, BMC Software, Tivoli Systems, IBM\r
+//\r
+// Permission is hereby granted, free of charge, to any person obtaining a copy\r
+// of this software and associated documentation files (the "Software"), to \r
+// deal in the Software without restriction, including without limitation the \r
+// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or \r
+// sell copies of the Software, and to permit persons to whom the Software is\r
+// furnished to do so, subject to the following conditions:\r
+// \r
+// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN \r
+// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED\r
+// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT\r
+// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR \r
+// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT \r
+// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN \r
+// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+//\r
+//==============================================================================\r
+//%/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// Copyright (c) 2000, 2001 The Open group, BMC Software, Tivoli Systems, IBM\r
+//\r
+// Permission is hereby granted, free of charge, to any person obtaining a copy\r
+// of this software and associated documentation files (the "Software"), to \r
+// deal in the Software without restriction, including without limitation the \r
+// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or \r
+// sell copies of the Software, and to permit persons to whom the Software is\r
+// furnished to do so, subject to the following conditions:\r
+// \r
+// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN \r
+// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED\r
+// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT\r
+// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR \r
+// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT \r
+// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN \r
+// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+//\r
+//==============================================================================\r
+//\r
+// Author: Mike Brasher (mbrasher@bmc.com)\r
+//\r
+// Modified By:\r
+//\r
+//\r
+// Author: Mike Brasher (mbrasher@bmc.com)\r
+//\r
+// Modified By:\r
+//\r
+//%/////////////////////////////////////////////////////////////////////////////\r
+\r
+\r
+#include <cassert>\r
+#include <strstream>\r
+#include <Pegasus/Common/String.h>\r
+\r
+PEGASUS_USING_PEGASUS;\r
+PEGASUS_USING_STD;\r
+#include <Pegasus/Common/Exception.h>\r
+\r
+static void TestSplit()\r
+{\r
+    {\r
+       String line = " a       b \"c d e\" fff  \"\"   gggg";\r
+       Array<String> fields;\r
+       String::split(line, fields);\r
+       assert(fields.size() == 6);\r
+       assert(fields[0] == "a");\r
+       assert(fields[1] == "b");\r
+       assert(fields[2] == "c d e");\r
+       assert(fields[3] == "fff");\r
+       assert(fields[4] == "");\r
+       assert(fields[5] == "gggg");\r
+    }\r
+\r
+    {\r
+       String line = "";\r
+       Array<String> fields;\r
+       String::split(line, fields);\r
+       assert(fields.size() == 0);\r
+    }\r
+\r
+    {\r
+       String line = "hello";\r
+       Array<String> fields;\r
+       String::split(line, fields);\r
+       assert(fields.size() == 1);\r
+       assert(fields[0] == "hello");\r
+    }\r
+\r
+    {\r
+       String line;\r
+       Array<String> fields;\r
+       fields.append("one");\r
+       fields.append("two \"three\" four");\r
+       fields.append("five");\r
+       String::join(fields, line);\r
+       Boolean result = line == "one \"two \\\"three\\\" four\" five";\r
+       assert(result);\r
+\r
+       fields.clear();\r
+       String::split(line, fields);\r
+       assert(fields.size() == 3);\r
+       assert(fields[0] == "one");\r
+       result = fields[1] == "two \"three\" four";\r
+       assert(result);\r
+       assert(fields[2] == "five");\r
+    }\r
+\r
+    {\r
+    Array<String> fields;\r
+    fields.append("./associations.txt");\r
+    fields.append("A.left=\"x.key=\\\"one\\\"\",right=\"y.key=\\\"two\\\"\"");\r
+    fields.append("A");\r
+    fields.append("X.key=\"one\"");\r
+    fields.append("X");\r
+    fields.append("left");\r
+    fields.append("Y");\r
+    fields.append("right");\r
+    fields.append("Y.key=\"two\"");\r
+\r
+    String line;\r
+    String::join(fields, line);\r
+\r
+    Array<String> tmpFields;\r
+    String::split(line, tmpFields);\r
+\r
+    assert(tmpFields.size() == fields.size());\r
+    for (Uint32 i = 0; i < fields.size(); i++)\r
+       assert(fields[i] == tmpFields[i]);\r
+    }\r
+}\r
+\r
+int main()\r
+{\r
+    String s1 = "Hello World";\r
+    String s2 = s1;\r
+    String s3(s2);\r
+\r
+    assert(String::equal(s1, s3));\r
+\r
+    // Test append characters to String\r
+    String s4 = "Hello";\r
+    s4.append(Char16(0x0000));\r
+    s4.append(Char16(0x1234));\r
+    s4.append(Char16(0x5678));\r
+    s4.append(Char16(0x9cde));\r
+    s4.append(Char16(0xffff));\r
+\r
+    {\r
+       ostrstream os;\r
+       os << s4;\r
+       os.put('\0');\r
+       const char EXPECTED[] = "Hello\\x0000\\x1234\\x5678\\x9CDE\\xFFFF";\r
+       char* tmp = os.str();\r
+       assert(strcmp(EXPECTED, tmp) == 0);\r
+       delete [] tmp;\r
+    }\r
+\r
+    {\r
+       // Test allocateCString\r
+       const char STR0[] = "one two three four";\r
+       String s = STR0;\r
+       char* tmp = s.allocateCString();\r
+       assert(strcmp(tmp, STR0) == 0);\r
+       const char STR1[] = "zero ";\r
+       delete [] tmp;\r
+    }\r
+\r
+    {\r
+       // Test appendToCString \r
+       const char STR0[] = "one two three four";\r
+       String s = STR0;\r
+       const char STR1[] = "zero ";\r
+       char* tmp = new char[strlen(STR1) + s.size() + 1];\r
+       strcpy(tmp, STR1);\r
+       s.appendToCString(tmp);\r
+       assert(strcmp(tmp, "zero one two three four") == 0);\r
+       delete [] tmp;\r
+    }\r
+\r
+    {\r
+       // Test appendToCString with length parameter\r
+       const char STR0[] = "one two three four";\r
+       String s = STR0;\r
+       const char STR1[] = "zero ";\r
+       char* tmp = new char[strlen(STR1) + s.size() + 1];\r
+       strcpy(tmp, STR1);\r
+       s.appendToCString(tmp, 7);\r
+       assert(strcmp(tmp, "zero one two") == 0);\r
+       delete [] tmp;\r
+    }\r
+\r
+    {\r
+       // Test remove\r
+       String s = "abcdefg";\r
+       s.remove(3, 3);\r
+       assert(String::equal(s, "abcg"));\r
+       assert(s.size() == 4);\r
+\r
+       s = "abcdefg";\r
+       s.remove(3, 4);\r
+       assert(String::equal(s, "abc"));\r
+       assert(s.size() == 3);\r
+\r
+       s = "abcdefg";\r
+       s.remove(3);\r
+       assert(String::equal(s, "abc"));\r
+       assert(s.size() == 3);\r
+\r
+       s = "abc";\r
+       s.remove(3);\r
+       assert(String::equal(s, "abc"));\r
+       assert(s.size() == 3);\r
+\r
+       s = "abc";\r
+       s.remove(0);\r
+       assert(String::equal(s, ""));\r
+       assert(s.size() == 0);\r
+\r
+       s = "abc";\r
+       s.remove(0, 1);\r
+       assert(String::equal(s, "bc"));\r
+       assert(s.size() == 2);\r
+\r
+       String t1 = "HELLO";\r
+       String t2 = ToLower(t1);\r
+       assert(String::equal(t1, "HELLO"));\r
+       assert(String::equal(t2, "hello"));\r
+    }\r
+\r
+    // Test of the different overload operators\r
+    {\r
+       // test the append  overload operator +=;\r
+       String t1 = "one";\r
+       t1 += " two";\r
+       assert(String::equal(t1, "one two"));\r
+       t1 += ' ';\r
+       t1 += 't';\r
+       t1 += 'h';\r
+       t1 += 'r';\r
+       t1 += "ee";\r
+       assert(String::equal(t1,"one two three"));\r
+       \r
+       // used as example in Doc.\r
+       String test = "abc";\r
+       test += "def";\r
+       assert(test == "abcdef");\r
+    }\r
+\r
+    {\r
+       // Test the == overload operator\r
+       String t1 = "one";\r
+       String t2 = "one";\r
+       assert(t1 == "one");\r
+       assert("one" == t1);\r
+       assert(t1 == t2);\r
+       assert(t2 == t1);\r
+       assert(String("one") == "one");\r
+\r
+       const char STR0[] = "one two three four";\r
+       String s = STR0;\r
+       char* tmp = s.allocateCString();\r
+       assert(tmp == s);\r
+       assert(s == tmp);\r
+       delete [] tmp;\r
+    }\r
+\r
+    {\r
+       // Tests of the + Overload operator\r
+       String t1 = "abc";\r
+       String t2 = t1 + t1;\r
+       assert(t2 == "abcabc");\r
+       t1 = "abc";\r
+       t2 = t1 + "def";\r
+       assert(t2 == "abcdef");\r
+\r
+       t1 = "ghi";\r
+       assert(t1 == "ghi");\r
+\r
+       // ATTN: the following fails because there\r
+       // is no single character overload operator\r
+       // KS: Apr 2001\r
+       // t2 = t1 + 'k' + 'l' + 'm' + "nop";\r
+       t2 = t1 + "k" + "l" + "m" + "nop";\r
+       assert(t2 == "ghiklmnop");\r
+       assert(String::equal(t2,"ghiklmnop"));\r
+\r
+       // add tests for != operator.\r
+\r
+       t1 = "abc";\r
+       assert(t1 != "ghi");\r
+       assert(t1 != t2);\r
+\r
+       // add tests for other compare operators\r
+\r
+       // Operater <\r
+       t1 = "ab";\r
+       t2 = "cde";\r
+       assert(t1 < t2);\r
+       assert(t1 <= t2);\r
+       assert(t2 > t1);\r
+       assert(t2 >=t1);\r
+       t2 = t1;\r
+       assert(t1 <= t2);\r
+       assert(t1 >= t2);\r
+\r
+       // comparison and equals\r
+       // the compare is for null term strings.\r
+       // Therefore following does not work\r
+       // the compare operators cover the problem\r
+       // for String objects.\r
+       // assert(String::compare(t1,t2) == -1);\r
+\r
+\r
+       // Tests for compare with same length\r
+       t1 = "abc";\r
+       t2 = "def";\r
+       assert(t1 < t2);\r
+\r
+       // comparison and equals\r
+       // compare is for null term strings\r
+       // therefore following does not work.\r
+       //assert(String::compare(t1,t2) == -1); \r
+    }\r
+\r
+    {\r
+       // Test of the [] operator\r
+       String t1 = "abc";\r
+       Char16 c = t1[1];\r
+       // note c is Char16\r
+       assert(c == 'b');\r
+\r
+       //ATTN: test for outofbounds exception\r
+       try\r
+       {\r
+           c = t1[200];\r
+       }\r
+       catch (OutOfBounds&)\r
+       {\r
+       assert(true);\r
+       }\r
+    }\r
+\r
+    {\r
+       // Test the find function\r
+       String t1 = "abcdef";\r
+       String t2 = "cde";\r
+       String t3 = "xyz";\r
+       String t4 = "abc";\r
+       String t5 = "abd";\r
+       String t6 = "defg";\r
+       assert(t1.find('c') == 2);\r
+       assert(t1.find(t2)==2);\r
+       assert(t1.find(t3)==(Uint32)-1);\r
+       assert(t1.find(t4)==0);\r
+       assert(t1.find(t5)==(Uint32)-1);\r
+       assert(t1.find(t6)==(Uint32)-1);\r
+       assert(t1.find("cde")==2);\r
+       assert(t1.find("def")==3);\r
+       assert(t1.find("xyz")==(Uint32)-1);\r
+       assert(t1.find("a") ==0);\r
+\r
+       // test for the case where string\r
+       // partly occurs and then later\r
+       // completely occurs\r
+        String s = "this is an apple";\r
+       assert(s.find("apple")==11);\r
+       assert(s.find("appld")==(Uint32)-1);\r
+       assert(s.find("this")==0);\r
+       assert(s.find("t")==0);\r
+       assert(s.find("e")==15);\r
+       s = "a";\r
+       assert(s.find("b")==(Uint32)-1);\r
+       assert(s.find("a")==0);\r
+       assert(s.find(s)==0);\r
+       s = "aaaapple";\r
+       assert(s.find("apple")==3);\r
+\r
+       {\r
+           String nameSpace = "a#b#c";\r
+           nameSpace.translate('#', '/');\r
+           assert(nameSpace == "a/b/c");\r
+       }\r
+\r
+       TestSplit();\r
+    }\r
+\r
+\r
+    cout << "+++++ passed all tests" << endl;\r
+\r
+    return 0;\r
+}\r