diff options
Diffstat (limited to 'lib/libUPnP/Neptune/Source/Tests/Strings1/StringsTest1.cpp')
-rw-r--r-- | lib/libUPnP/Neptune/Source/Tests/Strings1/StringsTest1.cpp | 663 |
1 files changed, 663 insertions, 0 deletions
diff --git a/lib/libUPnP/Neptune/Source/Tests/Strings1/StringsTest1.cpp b/lib/libUPnP/Neptune/Source/Tests/Strings1/StringsTest1.cpp new file mode 100644 index 0000000..69e7132 --- /dev/null +++ b/lib/libUPnP/Neptune/Source/Tests/Strings1/StringsTest1.cpp @@ -0,0 +1,663 @@ +/***************************************************************** +| +| Stings Test Program 1 +| +| (c) 2001-2003 Gilles Boccon-Gibod +| Author: Gilles Boccon-Gibod (bok@bok.net) +| + ****************************************************************/ + +/*---------------------------------------------------------------------- +| includes ++---------------------------------------------------------------------*/ +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include "Neptune.h" + +/*---------------------------------------------------------------------- +| Fail ++---------------------------------------------------------------------*/ +static void +Fail() +{ + printf("##################################\n"); + NPT_ASSERT(0); + //exit(1); +} + +/*---------------------------------------------------------------------- +| CompareTest ++---------------------------------------------------------------------*/ +static void +CompareTest(const char* name, const char* a, const char* b, int result, int expected) +{ + printf("%s %s %s = %d [%s]\n", a, name, b, result, result == expected ? "pass" : "fail"); + if (result != expected) Fail(); +} + +/*---------------------------------------------------------------------- +| EqualTest ++---------------------------------------------------------------------*/ +static void +EqualTest(const char* name, const char* a, const char* b, const char* expected) +{ + printf("op %s on %s, result = %s ", name, a, b); + if (strcmp(expected, b)) { + printf(" [fail: expected %s, got %s]\n", expected, b); + } else { + printf(" [pass]\n"); + } + if (strcmp(expected, b)) Fail(); +} + +/*---------------------------------------------------------------------- +| StringTest ++---------------------------------------------------------------------*/ +static void +StringTest(const char* name, const char* a, const char* expected) +{ + printf("%s: %s", name, a); + if (strcmp(expected, a)) { + printf(" [fail: expected %s, got %s]\n", expected, a); + } else { + printf(" [pass]\n"); + } + if (strcmp(expected, a)) Fail(); +} + +/*---------------------------------------------------------------------- +| IntTest ++---------------------------------------------------------------------*/ +static void +IntTest(const char* name, int a, int expected) +{ + printf("%s: %d", name, a); + if (a != expected) { + printf(" [fail: expected %d, got %d]\n", expected, a); + } else { + printf(" [pass]\n"); + } + if (a != expected) Fail(); +} + +/*---------------------------------------------------------------------- +| FloatTest ++---------------------------------------------------------------------*/ +static void +FloatTest(const char* name, float a, float expected) +{ + printf("%s: %f", name, a); + if (a != expected) { + printf(" [fail: expected %f, got %f]\n", expected, a); + } else { + printf(" [pass]\n"); + } + if (a != expected) Fail(); +} + + +/*---------------------------------------------------------------------- +| main ++---------------------------------------------------------------------*/ +int +main(int /*argc*/, char** /*argv*/) +{ + printf(":: testing empty string\n"); + NPT_String s; + printf("sizeof(s)=%d, chars = '%s'\n", (int)sizeof(s), s.GetChars()); + + printf(":: testing allocation, new and delete\n"); + NPT_String* n0 = new NPT_String("Hello"); + delete n0; + NPT_String n1 = "Bye"; + n1 = "ByeBye"; + + printf(":: testing factories\n"); + NPT_String f0 = NPT_String::FromInteger(0); + StringTest("FromInteger(0)", f0, "0"); + f0 = NPT_String::FromInteger(1234567); + StringTest("FromInteger(1234567)", f0, "1234567"); + f0 = NPT_String::FromInteger(-1234567); + StringTest("FromInteger(-1234567)", f0, "-1234567"); + f0 = NPT_String::FromIntegerU(0xFFFFFFFF); + StringTest("FromIntegerU(0xFFFFFFFF)", f0, "4294967295"); + + printf(":: testing constructors\n"); + NPT_String s00; + StringTest("constructor()", s00, ""); + NPT_String s01("abcdef"); + StringTest("constructor(const char*)", s01, "abcdef"); + NPT_String s02(s01); + StringTest("constructor(const NPT_String&)", s02, "abcdef"); + NPT_String s03("abcdefgh", 3); + StringTest("constructor(const char* s, unsigned int)", s03, "abc"); + NPT_String s04('Z'); + StringTest("constructor(char)", s04, "Z"); + NPT_String s05('Z', 7); + StringTest("constructor(char, unsigned int)", s05, "ZZZZZZZ"); + NPT_String s06((const char*)NULL); + StringTest("constructor(NULL)", s06, ""); + NPT_String s07(s06); + StringTest("constructor(const NPT_String& = empty)", s07, ""); + NPT_String s08(""); + StringTest("constructor(const char* = \"\")", s08, ""); + NPT_String s09("jkhlkjh\0fgsdfg\0fgsdfg", 10); + StringTest("NPT_String s09(\"jkhlkjh\0fgsdfg\0fgsdfg\", 0, 10)", s09, "jkhlkjh"); + NPT_String s10((const char*)NULL, 0); + StringTest("NPT_String s10(NULL, 0)", s10, ""); + NPT_String s11(' ', 0); + StringTest("NPT_String s11(' ', 0)", s11, ""); + + printf(":: testing assignments\n"); + NPT_String a00 = (const char*)NULL; + StringTest("operator=(const char* = NULL)", a00, ""); + NPT_String a01 = a00; + StringTest("operator=(const NPT_String& = empty)", a01, ""); + NPT_String a02 = "ab"; + StringTest("operator=(const char*)", a02, "ab"); + a02 = "abc"; + StringTest("operator=(const char* = bigger string)", a02, "abc"); + a02 = "ab"; + StringTest("operator=(const char* = smaller)", a02, "ab"); + a02 = (const char*)NULL; + StringTest("operator=(const char* = NULL)", a02, ""); + a02 = "abcd"; + NPT_String a03 = a02; + a02 = "ab"; + StringTest("operator=(const char*) with shared buffer", a02, "ab"); + a02 = ""; + StringTest("operator=(const char* = \"\")", a02, ""); + NPT_String p2("self"); + p2 = p2; + StringTest("self assignment", p2, "self"); + NPT_String p3 = p2; + p2 = p2; + StringTest("self assignment with other ref", p2, "self"); + + printf(":: testing SetLength()\n"); + NPT_String sl00; + IntTest("", sl00.SetLength(0), NPT_SUCCESS); + IntTest("", sl00.SetLength(3, true), NPT_SUCCESS); + StringTest("", sl00, " "); + sl00.Assign("blabla", 6); + IntTest("", sl00.SetLength(7, true), NPT_SUCCESS); + StringTest("", sl00, "blabla "); + IntTest("", sl00.SetLength(3), NPT_SUCCESS); + StringTest("", sl00, "bla"); + IntTest("", sl00.SetLength(0), NPT_SUCCESS); + StringTest("", sl00, ""); + + printf(":: testing casts\n"); + s = "hello"; + printf(":: cast to char*\n"); + StringTest("cast to char*", (char*)s, "hello"); + StringTest("cast to const char*", (const char*)s, "hello"); + + printf(":: testing GetLength\n"); + NPT_String gl0 = "abcefg"; + IntTest("GetLength", gl0.GetLength(), 6); + gl0 = ""; + IntTest("GetLength", gl0.GetLength(), 0); + gl0 = "abcd"; + NPT_String gl1 = gl0; + IntTest("GetLength", gl1.GetLength(), 4); + gl1 += 'd'; + IntTest("GetLength", gl1.GetLength(), 5); + + printf("::testing references\n"); + NPT_String* d1; + NPT_String d2; + NPT_String d3; + d1 = new NPT_String("first ref"); + d2 = *d1; + delete d1; + d1 = NULL; + printf("%s", d2.GetChars()); + d3 = d2; + d3 = "d3"; + printf("%s", d2.GetChars()); + printf("%s", d3.GetChars()); + + printf("::testing Append\n"); + NPT_String l = "blabla"; + l.Append("blibliblo", 6); + StringTest("append(const char*, int size)", l, "blablablibli"); + NPT_String a; + a.Append("bloblo", 3); + StringTest("append to NULL", a, "blo"); + + printf("::testing Reserve\n"); + NPT_String r = "123"; + r.Reserve(100); + IntTest("size of string not changed", 3, r.GetLength()); + r += "4"; + r += "5"; + r += "6"; + NPT_String r2 = r; // make a new reference + r += "7"; + r += "8"; + r2 += "a"; + r2 += "b"; + StringTest("string r not changed", r, "12345678"); + StringTest("string r2 not changed", r2, "123456ab"); + NPT_String rr0 = "hello"; + rr0.Reserve(0); + StringTest("string rr0 not changed", rr0, "hello"); + rr0.Reserve(100); + StringTest("string rr0 not changed", rr0, "hello"); + + printf(":: testing substring"); + NPT_String sup("abcdefghijklmnopqrstub"); + NPT_String sub = sup.SubString(0, 2); + StringTest("substring [0,2] of 'abcdefghijklmnopqrstub'", sub, "ab"); + sub = sup.SubString(3, 4); + StringTest("substring [3,4] of 'abcdefghijklmnopqrstub'", sub, "defg"); + sub = sup.SubString(100, 5); + StringTest("substring [100,5] of 'abcdefghijklmnopqrstub'", sub, ""); + sub = sup.SubString(8,100); + StringTest("substring [8,100] of 'abcdefghijklmnopqrstub'", sub, "ijklmnopqrstub"); + printf(":: decl NPT_String sub2(p2, 1, 2);\n"); + + printf(":: testing trims"); + NPT_String trim = "*&##just this$&**"; + trim.TrimLeft('*'); + StringTest("TrimLeft('*') of '*&##just this$&**'", trim, "&##just this$&**"); + trim.TrimLeft("*&##"); + StringTest("TrimLeft('&*##')", trim, "just this$&**"); + trim.TrimRight('*'); + StringTest("TrimRight('*')", trim, "just this$&"); + trim.TrimRight("*&##"); + StringTest("TrimRight('*&##')", trim, "just this$"); + trim = "*&##just this$&**"; + trim.Trim("$&*#"); + StringTest("Trim('$&*#') of '*&##just this$&**'", trim, "just this"); + trim = "\r\njust this\t \r\n"; + trim.Trim(); + StringTest("Trim() of '\\r\\njust this\\t \\r\\n'", trim, "just this"); + trim = "*&##just this$&**"; + trim.Trim('*'); + StringTest("", trim, "&##just this$&"); + + printf(":: testing operator+=(NPT_String&)\n"); + NPT_String o1 = "hello"; + NPT_String o2 = ", gilles"; + o1 += o2; + StringTest("operator +=", o1, "hello, gilles"); + o1 += ", some more"; + StringTest("operator +=", o1, "hello, gilles, some more"); + + o1 = "abc"; + o1 += '#'; + StringTest("operator+=(char)", o1, "abc#"); + + o1 = "hello"; + o2 = ", gilles"; + NPT_String o3 = o1+o2; + StringTest("operator+(NPT_String&, NPT_String&)", o3, "hello, gilles"); + o3 = o1+", gilles"; + StringTest("operator+(NPT_String&, const char*)", o3, "hello, gilles"); + o3 = "I say:"+o1; + StringTest("operator+(const char*, NPT_String&)", o3, "I say:hello"); + o3 = NPT_String("one, ") + "two"; + StringTest("NPT_String(\"one, \") + \"two\";", o3, "one, two"); + + printf(":: testing operator[]\n"); + o1 = "abcdefgh"; + IntTest("o1[0]", 'a', o1[0]); + IntTest("o1[1]", 'b', o1[1]); + IntTest("o1[2]", 'c', o1[2]); + o1[0] = '7'; + IntTest("o1[0]", '7', o1[0]); + + printf(":: testing operator comparisons\n"); + CompareTest(">", "abc", "abc", NPT_String("abc") > "abc", 0); + CompareTest(">=", "abc", "abc", NPT_String("abc") >= "abc", 1); + CompareTest("==", "abc", "abc", NPT_String("abc") == "abc", 1); + CompareTest("!=", "abc", "abc", NPT_String("abc") != "abc", 0); + CompareTest("<", "abc", "abc", NPT_String("abc") < "abc", 0); + CompareTest("<=", "abc", "abc", NPT_String("abc") <= "abc", 1); + + CompareTest(">", "abc", "ab", NPT_String("abc") > "ab", 1); + CompareTest(">=", "abc", "ab", NPT_String("abc") >= "ab", 1); + CompareTest("==", "abc", "ab", NPT_String("abc") == "ab", 0); + CompareTest("!=", "abc", "ab", NPT_String("abc") != "ab", 1); + CompareTest("<", "abc", "ab", NPT_String("abc") < "ab", 0); + CompareTest("<=", "abc", "ab", NPT_String("abc") <= "ab", 0); + + CompareTest(">", "ab", "abc", NPT_String("ab") > "abc", 0); + CompareTest(">=", "ab", "abc", NPT_String("ab") >= "abc", 0); + CompareTest("==", "ab", "abc", NPT_String("ab") == "abc", 0); + CompareTest("!=", "ab", "abc", NPT_String("ab") != "abc", 1); + CompareTest("<", "ab", "abc", NPT_String("ab") < "abc", 1); + CompareTest("<=", "ab", "abc", NPT_String("ab") <= "abc", 1); + + CompareTest(">", "bc", "abc", NPT_String("bc") > "abc", 1); + CompareTest(">=", "bc", "abc", NPT_String("bc") >= "abc", 1); + CompareTest("==", "bc", "abc", NPT_String("bc") == "abc", 0); + CompareTest("!=", "bc", "abc", NPT_String("bc") != "abc", 1); + CompareTest("<", "bc", "abc", NPT_String("bc") < "abc", 0); + CompareTest("<=", "bc", "abc", NPT_String("bc") <= "abc", 0); + + CompareTest(">", "abc", "bc", NPT_String("abc") > "bc", 0); + CompareTest(">=", "abc", "bc", NPT_String("abc") >= "bc", 0); + CompareTest("==", "abc", "bc", NPT_String("abc") == "bc", 0); + CompareTest("!=", "abc", "bc", NPT_String("abc") != "bc", 1); + CompareTest("<", "abc", "bc", NPT_String("abc") < "bc", 1); + CompareTest("<=", "abc", "bc", NPT_String("abc") <= "bc", 1); + + printf(":: testing Compare\n"); + CompareTest("cnc", "abc", "abc", NPT_String("abc").Compare("abc", true), 0); + CompareTest("cnc", "AbC3", "aBC3", NPT_String("AbC3").Compare("aBC3", true), 0); + CompareTest("cnc", "AbCc", "aBcD", NPT_String("AbCc").Compare("aBcD", true), -1); + CompareTest("cnc", "AbCC", "aBcd", NPT_String("AbCC").Compare("aBcd", true), -1); + CompareTest("cnc", "bbCc", "aBcc", NPT_String("bbCc").Compare("aBcc", true), 1); + CompareTest("cnc", "BbCC", "aBcc", NPT_String("BbCC").Compare("aBcc", true), 1); + CompareTest("cnc", "AbCC", "aBcd", NPT_String("AbCC").CompareN("aBcd", 4, true), -1); + CompareTest("cnc", "AbCC", "aBcd", NPT_String("AbCC").CompareN("aBcd", 5, true), -1); + CompareTest("cnc", "AbCC", "aBcd", NPT_String("AbCC").CompareN("aBcd", 3, true), 0); + + printf(":: testing MakeLowercase\n"); + NPT_String lower = "abcdEFGhijkl"; + lower.MakeLowercase(); + EqualTest("MakeLowercase (noref)", "abcdEFGhijkl", lower, "abcdefghijkl"); + lower = "abcdEFGhijkl"; + NPT_String lower2 = lower; + lower2.MakeLowercase(); + EqualTest("MakeLowercase (ref)", "abcdEFGhijkl", lower2, "abcdefghijkl"); + + printf(":: testing MakeUppercase\n"); + NPT_String upper = "abcdEFGhijkl"; + upper.MakeUppercase(); + EqualTest("MakeUppercase (noref)", "abcdEFGhijkl", upper, "ABCDEFGHIJKL"); + upper = "abcdEFGhijkl"; + NPT_String upper2 = upper; + upper2.MakeUppercase(); + EqualTest("MakeUppercase (ref)", "abcdEFGhijkl", upper2, "ABCDEFGHIJKL"); + + printf(":: testing ToLowercase\n"); + lower = "abcdEFGhijkl"; + EqualTest("ToLowercase", "abcdEFGhijkl", lower.ToLowercase(), "abcdefghijkl"); + + printf(":: testing ToUppercase\n"); + upper = "abcdEFGhijkl"; + EqualTest("ToUppercase", "abcdEFGhijkl", lower.ToUppercase(), "ABCDEFGHIJKL"); + + printf(":: testing Find (s=\"au clair de la lune\")\n"); + s = "au clair de la lune"; + int f = s.Find("au"); + IntTest("Find(\"au\")", f, 0); + f = s.Find("clair"); + IntTest("Find(\"clair\")", f, 3); + f = s.Find("luneb"); + IntTest("Find(\"luneb\")", f, -1); + f = s.Find((const char*)NULL); + IntTest("Find(NULL)", f, -1); + f = s.Find("hello"); + IntTest("Find(\"hello\")", f, -1); + f = s.Find(""); + IntTest("Find(\"\")", f, 0); + f = s.Find("clair", 2); + IntTest("Find(\"clair\", 2)", f, 3); + f = s.Find("clair", 100); + IntTest("Find(\"clair\", 100)", f, -1); + f = s.Find("cloir"); + IntTest("Find(\"cloir\")", f, -1); + f = s.Find("au clair de la lune"); + IntTest("Find(\"au clair de la lune\")", f, 0); + f = s.Find("au clair de la lune mon ami"); + IntTest("Find(\"au clair de la lune mon ami\")", f, -1); + f = s.Find('c'); + IntTest("Find('c')", f, 3); + NPT_String s1; + f = s1.Find("hello"); + IntTest("Find() in empty string", f, -1); + f = s.Find("Clair De La Lune", 0, true); + IntTest("s.Find(\"Clair De La Lune\"", f, 3); + f = s.Find('z'); + IntTest("", f, -1); + f = s.Find('a', 1); + IntTest("", f, 5); + f = s.Find('C', 0, true); + IntTest("", f, 3); + + printf(":: testing ReverseFind\n"); + s = "aabbccaa"; + f = s.ReverseFind("a"); + IntTest("", f, 7); + f = s.ReverseFind("a", 1); + IntTest("", f, 6); + f = s.ReverseFind("a", 9); + IntTest("", f, -1); + f = s.ReverseFind("aab"); + IntTest("", f, 0); + f = s.ReverseFind((const char*)NULL); + IntTest("", f, -1); + f = s.ReverseFind(""); + IntTest("", f, -1); + f = s.ReverseFind("aa", 1); + IntTest("", f, 0); + f = s.ReverseFind("aabbccaa"); + IntTest("", f, 0); + f = s.ReverseFind("aabbccaaa"); + IntTest("", f, -1); + f = s.ReverseFind("zz"); + IntTest("", f, -1); + f = s.ReverseFind('z'); + IntTest("", f, -1); + f = s.ReverseFind('b'); + IntTest("", f, 3); + f = s.ReverseFind('a', 2); + IntTest("", f, 1); + f = s.ReverseFind('B', 0, true); + IntTest("", f, 3); + f = s.ReverseFind('B'); + IntTest("", f, -1); + + printf(":: testing StartsWith\n"); + bool b = s.StartsWith(""); + IntTest("", b, 1); + b = s.StartsWith("aaba"); + IntTest("", b, 0); + b = s.StartsWith("aabbccaaa"); + IntTest("", b, 0); + b = s.StartsWith("aabb"); + IntTest("", b, 1); + b = s.StartsWith("AaB", true); + IntTest("", b, 1); + b = s.StartsWith("AaB"); + IntTest("", b, 0); + + printf(":: testing EndsWith\n"); + b = s.EndsWith(""); + IntTest("", b, 1); + b = s.EndsWith("aaba"); + IntTest("", b, 0); + b = s.EndsWith("aabbccaaa"); + IntTest("", b, 0); + b = s.EndsWith("ccaa"); + IntTest("", b, 1); + b = s.EndsWith("CcAa", true); + IntTest("", b, 1); + b = s.EndsWith("CcAa"); + IntTest("", b, 0); + + printf(":: testing Replace\n"); + NPT_String r0 = "abcdefghijefe"; + r0.Replace('e','@'); + StringTest("Replace(char, char)", r0, "abcd@fghij@f@"); + NPT_String r1 = r0; + r1.Replace('@', '#'); + StringTest("Replace(char, char)", r1, "abcd#fghij#f#"); + r2 = "blablabla"; + r2.Replace("bla", "blu"); + StringTest("Replace(str, str)", r2, "blublublu"); + r2 = "abcdefxxxxijxxxx0"; + r2.Replace("xxxx", "y"); + StringTest("Replace(str, str)", r2, "abcdefyijy0"); + r2 = "abcdefxijx0"; + r2.Replace("x", "yyyyyy"); + StringTest("Replace(str, str)", r2, "abcdefyyyyyyijyyyyyy0"); + + + printf(":: testing Insert\n"); + NPT_String in0; + in0.Insert("hello", 1); + StringTest("Insert into NULL, past end", in0, ""); + in0.Insert("hello"); + StringTest("Insert into NULL, at start", in0, "hello"); + in0.Insert("yoyo"); + StringTest("Insert at start", in0, "yoyohello"); + in0.Insert("yaya", 3); + StringTest("Insert at 3", in0, "yoyyayaohello"); + + printf(":: testing Erase\n"); + NPT_String er0; + er0.Erase(0, 0); + StringTest("1", er0, ""); + er0.Erase(0, 1); + StringTest("1", er0, ""); + er0.Erase(1, 1); + StringTest("1", er0, ""); + er0 = "hello world"; + er0.Erase(0, 1); + StringTest("1", er0, "ello world"); + er0.Erase(4); + StringTest("1", er0, "elloworld"); + er0.Erase(7, 3); + StringTest("1", er0, "ellowor"); + er0.Erase(5, 2); + StringTest("1", er0, "ellow"); + er0.Erase(0, 5); + StringTest("1", er0, ""); + + printf(":: testing ToInteger"); + NPT_String ti00("123"); + unsigned int ul00; + int l00; + IntTest("", ti00.ToInteger(ul00), NPT_SUCCESS); + IntTest("", ul00, 123); + IntTest("", ti00.ToInteger(l00), NPT_SUCCESS); + IntTest("", l00, 123); + ti00 = "123ggds"; + IntTest("", ti00.ToInteger(l00, false), NPT_ERROR_INVALID_PARAMETERS); + IntTest("", ti00.ToInteger(l00, true), NPT_SUCCESS); + IntTest("", l00, 123); + ti00 = "-123"; + IntTest("", ti00.ToInteger(ul00, false), NPT_ERROR_INVALID_PARAMETERS); + IntTest("", ti00.ToInteger(l00), NPT_SUCCESS); + IntTest("", l00, -123); + + printf(":: testing ToFloat"); + NPT_String tf00("-1.234flo"); + float fl00; + IntTest("", tf00.ToFloat(fl00, true), NPT_SUCCESS); + FloatTest("", fl00, -1.234f); + IntTest("", tf00.ToFloat(fl00, false), NPT_ERROR_INVALID_PARAMETERS); + + + NPT_List<NPT_String> sl; + sl = NPT_String("").Split(""); + IntTest("", sl.GetItemCount(), 1); + StringTest("", *sl.GetFirstItem(), ""); + + sl = NPT_String("").Split("#"); + IntTest("", sl.GetItemCount(), 1); + StringTest("", *sl.GetFirstItem(), ""); + + sl = NPT_String("aaa").Split(""); + IntTest("", sl.GetItemCount(), 1); + StringTest("", *sl.GetFirstItem(), "aaa"); + + sl = NPT_String("aaa").Split("b"); + IntTest("", sl.GetItemCount(), 1); + StringTest("", *sl.GetFirstItem(), "aaa"); + + sl = NPT_String("aaa").Split("a"); + IntTest("", sl.GetItemCount(), 4); + NPT_String* sli; + sl.Get(0, sli); + StringTest("", *sli, ""); + sl.Get(1, sli); + StringTest("", *sli, ""); + sl.Get(2, sli); + StringTest("", *sli, ""); + sl.Get(3, sli); + StringTest("", *sli, ""); + + sl = NPT_String("aaa").Split("aa"); + IntTest("", sl.GetItemCount(), 2); + sl.Get(0, sli); + StringTest("", *sli, ""); + sl.Get(1, sli); + StringTest("", *sli, "a"); + + sl = NPT_String("aaa").Split("aaa"); + IntTest("", sl.GetItemCount(), 2); + sl.Get(0, sli); + StringTest("", *sli, ""); + sl.Get(1, sli); + StringTest("", *sli, ""); + + sl = NPT_String("a;b;c;d;e").Split(";"); + IntTest("", sl.GetItemCount(), 5); + sl.Get(0, sli); + StringTest("", *sli, "a"); + sl.Get(1, sli); + StringTest("", *sli, "b"); + sl.Get(2, sli); + StringTest("", *sli, "c"); + sl.Get(3, sli); + StringTest("", *sli, "d"); + sl.Get(4, sli); + StringTest("", *sli, "e"); + + NPT_String sf = NPT_String::Format("%s.%d", "hello", 3); + StringTest("", "hello.3", sf.GetChars()); + for (unsigned int i=0; i<10; i++) { + sf = NPT_String::Format("%s%s", sf.GetChars(), sf.GetChars()); + } + IntTest("", sf.GetLength(), (1<<10)*7); + + + NPT_LargeSize lu1=2000000; + NPT_LargeSize lu2=2000002; + NPT_String range = NPT_String::Format("bytes=%lu-%lu", (long)lu1, (long)lu2); + StringTest("", "bytes=2000000-2000002", range.GetChars()); + + char s_buf[7]; + s_buf[5] = 'a'; + NPT_CopyString(s_buf, "hello"); + StringTest("", s_buf, "hello"); + s_buf[5] = 'a'; + NPT_CopyStringN(s_buf, "hello", 6); + StringTest("", s_buf, "hello"); + s_buf[5] = 'a'; + NPT_CopyStringN(s_buf, "hello", 5); + StringTest("", s_buf, "hello"); + s_buf[5] = 'a'; + NPT_CopyStringN(s_buf, "hello", 4); + StringTest("", s_buf, "hell"); + + NPT_String hs1 = "curds and whey"; + IntTest("", hs1.GetHash32(), 0x22d5344e); + + + char buffer[6] = "abcde"; + NPT_String tr0(buffer, 5); + IntTest("", tr0.GetLength(), 5); + buffer[1] = 0; + NPT_String tr1(buffer, 5); + IntTest("", tr1.GetLength(), 1); + buffer[0] = 0; + NPT_String tr2(buffer, 5); + IntTest("", tr2.GetLength(), 0); + tr0.Assign(buffer, 5); + IntTest("", tr0.GetLength(), 0); + buffer[0] = 'a'; + tr0.Assign(buffer, 5); + IntTest("", tr0.GetLength(), 1); + + printf("------------------------- done -----\n"); + return 0; +} |