|
reSIProcate/rutil
9694
|
Public Member Functions | |
| int | main () |
Definition at line 11 of file testData.cxx.
| int TestData::main | ( | ) | [inline] |
Definition at line 14 of file testData.cxx.
References resip::Data::append(), resip::Data::base64decode(), resip::Data::base64encode(), resip::Data::Borrow, resip::Data::c_str(), resip::Data::caseInsensitivehash(), resip::Data::caseInsensitiveTokenCompare(), resip::Data::caseInsensitiveTokenHash(), resip::Data::charEncoded(), resip::Data::charUnencoded(), resip::Data::clear(), resip::Data::convertDouble(), resip::Data::convertInt(), resip::Data::convertSize(), resip::Data::convertUInt64(), resip::Data::convertUnsignedLong(), resip::Log::Cout, resip::Data::data(), resip::Log::Debug, resip::Data::empty(), resip::Data::Empty, resip::Data::find(), resip::Data::FiveDigitPrecision, resip::Data::hash(), resip::Data::hex(), resip::Log::initialize(), resip::isEqualNoCase(), resip::Data::lowercase(), resip::Data::mCapacity, resip::Data::md5(), resip::Data::mShareEnum, resip::Data::npos, resip::Data::postfix(), resip::Data::Preallocate, resip::Data::prefix(), resip::Data::replace(), resip::Data::SevenDigitPrecision, resip::Data::Share, resip::Data::size(), resip::Data::substr(), resip::Data::Take, resip::Data::uppercase(), resip::Data::urlDecoded(), resip::Data::urlEncode(), and resip::Data::urlEncoded().
Referenced by main().
{
Log::initialize(Log::Cout, Log::Debug, Data::Empty);
{
const char* txt = "buffer";
Data d(txt);
// copies
assert(txt != d.data());
const char* b = d.data();
d.c_str();
// not reallocated
assert(b == d.data());
}
{
const char* txt = "buffer";
Data d(Data::Share, txt, strlen(txt));
// shared
assert(txt == d.data());
d.c_str();
// reallocated
assert(txt != d.data());
}
{
const char* txt = "buffer";
Data d(Data::Borrow, txt, strlen(txt));
// shared
assert(txt == d.data());
const char* b = d.data();
d.c_str();
// reallocated
assert(b != d.data());
}
{
const int s = 12;
char* txt = new char[s];
Data d(Data::Take, txt, s);
// shared
assert(txt == d.data());
d.c_str();
// reallocated
assert(txt != d.data());
}
{
{
int length = 16;
char* buffer = new char [length];
for (int i=0; i<16; ++i)
{
buffer[i] = ' ';
}
Data target(Data::Take, buffer, length);
std::cerr << target.c_str() << endl;
}
{
Data input("abcdefghij");
std::cerr << "T0: " << input << std::endl;
input.replace("a", "b");
std::cerr << "T1: " << input << std::endl;
assert(input == "bbcdefghij");
input.replace("bb", "");
std::cerr << "T2: " << input << std::endl;
assert(input == "cdefghij");
}
{
Data input("");
std::cerr << "T0: " << input << std::endl;
input.replace("a", "b");
std::cerr << "T1: " << input << std::endl;
assert(input == "");
input.replace("bb", "");
std::cerr << "T2: " << input << std::endl;
assert(input == "");
}
{
Data from;
Data to;
Data example;
// asserts
//example.replace(from, to);
}
{
Data from("a");
Data to("b");
Data example;
example.replace(from, to);
assert(example.empty());
}
{
Data from("a");
Data to("b");
Data example("c");
example.replace(from, to);
assert(example == "c");
}
{
Data from("a");
Data to("b");
Data example("a");
example.replace(from, to);
assert(example == "b");
}
{
Data from("a");
Data to("b");
Data example("aaaa");
example.replace(from, to);
assert(example == "bbbb");
}
{
Data from("a");
Data to("b");
Data example("abracadabra");
example.replace(from, to);
assert(example == "bbrbcbdbbrb");
}
{
Data from("aa");
Data to("b");
Data example("aa");
example.replace(from, to);
assert(example == "b");
}
{
Data from("aa");
Data to("b");
Data example("aaaaa");
example.replace(from, to);
assert(example == "bba");
}
{
Data from("a");
Data to("bb");
Data example("a");
example.replace(from, to);
assert(example == "bb");
}
{
Data from("a");
Data to("bb");
Data example("abracadabra");
example.replace(from, to);
assert(example == "bbbrbbcbbdbbbrbb");
}
{
Data from("a");
Data to("bb");
const char* buffer = "abracadabra";
Data example(Data::Share, buffer, strlen(buffer));
example.replace(from, to);
assert(example == "bbbrbbcbbdbbbrbb");
}
{
Data from("a");
Data to("aa");
Data example("a");
example.replace(from, to);
assert(example == "aa");
}
{
Data from("a");
Data to("aa");
Data example("abracadabra");
example.replace(from, to);
assert(example == "aabraacaadaabraa");
}
{
Data from("abracadabra");
Data to("a");
Data example("abracadabra");
example.replace(from, to);
assert(example == "a");
}
{
Data from("abracadabra");
Data to("");
Data example("abracadabra");
example.replace(from, to);
assert(example == "");
}
{
Data from("abracadabra");
Data to("");
Data example("abracadabraabracadabraabracadabra");
example.replace(from, to);
assert(example == "");
}
}
{
Data input("abc123abca");
std::cerr << "T0: " << input << std::endl;
input.replace("abc", "ABCD");
std::cerr << "T1: " << input << std::endl;
assert(input == "ABCD123ABCDa");
}
{
const char* s = "a";
const char* ss = "bb";
const char* sss = "ccc";
Data one;
Data two;
Data three;
for (int i = 0; i < 100; ++i)
{
one.append(s, strlen(s));
two.append(ss, strlen(ss));
three.append(sss, strlen(sss));
}
assert(one.size() == 100);
assert(two.size() == 200);
assert(three.size() == 300);
}
{
Data httpString("safe");
Data enc;
enc = httpString.urlEncoded();
cerr << "res: " << enc << endl;
}
{
Data httpString("-_.~!$'()*,;=:@/?");
httpString += "0123456789";
Data result;
{
DataStream str(result);
httpString.urlEncode(str);
}
assert(result == httpString.urlEncoded());
cerr << ">> " << httpString.urlEncoded() << endl;
cerr << "<< " << httpString.urlEncoded().urlDecoded() << endl;
cerr << ".. " << httpString << endl;
assert(httpString == httpString.urlEncoded().urlDecoded());
assert(result == httpString);
}
{
Data httpString("http::/foo.com/in word?arg1=\"quote%\"&arg2=\"%%%%%\"");
Data result;
{
DataStream str(result);
httpString.urlEncode(str);
}
cerr << result << endl;
assert(result == "http::/foo.com/in+word?arg1=%22quote%25%22%26arg2=%22%25%25%25%25%25%22");
assert(result == httpString.urlEncoded());
cerr << ">> " << httpString.urlEncoded() << endl;
cerr << "<< " << httpString.urlEncoded().urlDecoded() << endl;
cerr << ".. " << httpString << endl;
assert(httpString == httpString.urlEncoded().urlDecoded());
}
{
Data needsCharEncode("CharEncode % me");
cerr << "original " << needsCharEncode << endl;
cerr << "charEncoded " << needsCharEncode.charEncoded() << endl;
cerr << "charUnencoded " << needsCharEncode.charEncoded().charUnencoded() << endl;
assert(needsCharEncode.charEncoded().charUnencoded() == needsCharEncode);
}
{
Data needsCharEncode("CharEncode % me");
needsCharEncode += " \";/?:@&=+%$,/t-_.!~*'()";
needsCharEncode += char(0);
needsCharEncode += char(254);
needsCharEncode += char(17);
cerr << needsCharEncode.charEncoded() << endl;
assert(needsCharEncode.charEncoded().charUnencoded() == needsCharEncode);
}
{
Data needsNoCharEncode("dontcharEncodeme");
cerr << needsNoCharEncode.charEncoded() << endl;
assert(needsNoCharEncode.charEncoded().charUnencoded() == needsNoCharEncode);
}
{
Data charEncodeCase("%5b%5D%5B%5d");
cerr << charEncodeCase.charUnencoded() << endl;
Data shouldMatch("[][]");
assert(charEncodeCase.charUnencoded()==shouldMatch);
}
{
Data s1;
assert(s1.convertInt() == 0);
Data s2("12foo");
assert(s2.convertInt() == 12);
Data s3("12");
assert(s3.convertInt() == 12);
Data s4("foo");
assert(s4.convertInt() == 0);
Data s5(" ");
assert(s5.convertInt() == 0);
Data s6(" +");
assert(s6.convertInt() == 0);
Data s7(" +17");
assert(s7.convertInt() == 17);
Data s8(" -17");
assert(s8.convertInt() == -17);
Data s9(" --17");
assert(s9.convertInt() == 0);
}
{
Data s1;
assert(s1.convertUnsignedLong() == 0);
Data s2("12foo");
assert(s2.convertUnsignedLong() == 12);
Data s3("12");
assert(s3.convertUnsignedLong() == 12);
Data s4("foo");
assert(s4.convertUnsignedLong() == 0);
Data s5(" ");
assert(s5.convertUnsignedLong() == 0);
Data s6(" +");
assert(s6.convertUnsignedLong() == 0);
Data s7(" +17");
assert(s7.convertUnsignedLong() == 17);
Data s8(" -17");
assert(s8.convertUnsignedLong() == 0);
}
{
Data s1;
assert(s1.convertUInt64() == 0);
Data s2("12foo");
assert(s2.convertUInt64() == 12);
Data s3("12");
assert(s3.convertUInt64() == 12);
Data s4("foo");
assert(s4.convertUInt64() == 0);
Data s5(" ");
assert(s5.convertUInt64() == 0);
Data s6(" +");
assert(s6.convertUInt64() == 0);
Data s7(" +17");
assert(s7.convertUInt64() == 17);
Data s8(" -17");
assert(s8.convertUInt64() == 0);
}
{
Data s1;
assert(s1.convertSize() == 0);
Data s2("12foo");
assert(s2.convertSize() == 12);
Data s3("12");
assert(s3.convertSize() == 12);
Data s4("foo");
assert(s4.convertSize() == 0);
Data s5(" ");
assert(s5.convertSize() == 0);
Data s6(" +");
assert(s6.convertSize() == 0);
Data s7(" +17");
assert(s7.convertSize() == 17);
Data s8(" -17");
assert(s8.convertSize() == 0);
}
#ifndef RESIP_FIXED_POINT
{
Data s1;
assert(s1.convertDouble() == 0);
Data s2("12foo");
assert(s2.convertDouble() == 12);
Data s3("12");
assert(s3.convertDouble() == 12);
Data s4("foo");
assert(s4.convertDouble() == 0);
Data s5(" ");
assert(s5.convertDouble() == 0);
Data s6(" +");
assert(s6.convertDouble() == 0);
Data s7(" +17");
assert(s7.convertDouble() == 17);
Data s8(" -17");
assert(s8.convertDouble() == -17);
Data s9(" --17");
assert(s9.convertDouble() == 0);
}
{
Data s1(".");
assert(s1.convertDouble() == 0);
Data s2("12.12foo");
assert(s2.convertDouble() == 12.12L);
Data s3("12.12");
assert(s3.convertDouble() == 12.12L);
Data s4(".foo");
assert(s4.convertDouble() == 0);
Data s5(" .");
assert(s5.convertDouble() == 0);
Data s6(" +.");
assert(s6.convertDouble() == 0);
Data s6a(" -.");
assert(s6a.convertDouble() == 0);
Data s7(" +17.17");
assert(s7.convertDouble() == 17.17L);
Data s8(" -17.17");
assert(s8.convertDouble() == -17.17L);
Data s9(" -17.17foo");
assert(s9.convertDouble() == -17.17L);
Data s10(" --17.17");
assert(s10.convertDouble() == 0);
Data s11(" -0000.017");
assert(s11.convertDouble() == -0.017L);
Data s12(".017");
assert(s12.convertDouble() == 0.017L);
Data s13(" .017");
assert(s13.convertDouble() == 0.017L);
Data s14(" +.017");
assert(s14.convertDouble() == 0.017L);
Data s15(" -.017");
assert(s15.convertDouble() == -0.017L);
}
#endif
{
Data s;
s = "some text";
s += Data::Empty;
s += "";
assert(s == "some text");
}
{
Data d;
const char *q = "\0";
d += q;
for(const char *p =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
*p;
++p)
{
d += *p;
d += q;
d += "~";
}
}
{
Data d;
assert(d.empty());
assert(d.c_str()[0] == 0);
}
{
const int maxs = 1024;
Data a;
for (int i = 0; i < maxs; i++)
{
Data b(a.c_str());
Data c(b);
a += "a";
}
cerr << "test data size 0.." << maxs << endl;
}
// test comparison
{
{
Data c = "sadfsdf";
Data d;
d = c;
assert(c == d);
}
{
const char* f = "asdasd";
Data d = Data(f);
assert(d == f);
}
{
Data d;
const char* f = "asdasd";
d = f;
assert(d == f);
}
{
Data d("asdfasfdsadf");
const char* f = "asdasd";
d = f;
assert(d == f);
}
{
const char* f = "asdasd";
Data d = Data(f);
assert(!(d < f));
}
{
Data d;
const char* f = "asdasd";
d = f;
assert(!(d < f));
}
{
Data d("asdfasfdsadf");
const char* f = "asdasd";
d = f;
assert(!(d < f));
}
{
Data a("qwerty");
Data b("qwerty");
assert(!(a < b));
}
{
Data a("qwert");
Data b("qwerty");
assert(a < b);
}
{
Data a("qwert");
Data b("qwerty");
assert(a < b);
assert(!(b < a));
}
{
const char* f = "asdasda";
Data d("asdasd");
assert(d < f);
}
{
const char * c("asdfasfdsadf");
Data d(Data::Share, c, 4);
assert(d < c);
}
{
const char * c("asdfasfdsadf");
Data d(Data::Share, c, strlen(c));
assert(!(d < c));
}
{
const char * c("asdfasfdsadf");
Data d(Data::Share, c, strlen(c));
assert(!(d < c));
Data c1(d); // copy, null terminate
assert(!(d < c1));
assert(!(c1 < d));
}
{
const char* f = "asdasd";
Data d("fsadf");
assert(!(d <= f));
}
{
const Data f = "asdasd";
Data d("fsadf");
assert(!(d <= f));
}
{
const char* f = "asdasd";
Data d = Data(f);
assert(d <= f);
}
{
Data d;
const char* f = "asdasd";
d = f;
assert(d <= f);
}
{
Data d("asdfasfdsadf");
const char* f = "asdasd";
d = f;
assert(d <= f);
}
{
Data a("qwerty");
Data b("qwerty");
assert(a <= b);
}
{
Data a("qwert");
Data b("qwerty");
assert(a <= b);
}
{
Data a("qwert");
Data b("qwerty");
assert(a <= b);
assert(!(b <= a));
}
{
const char* f = "asdasda";
Data d("asdasd");
assert(d <= f);
}
{
const char * c("asdfasfdsadf");
Data d(Data::Share, c, 4);
assert(d <= c);
}
{
const char * c("asdfasfdsadf");
Data d(Data::Share, c, strlen(c));
assert(d <= c);
}
{
const char * c("asdfasfdsadf");
Data d(Data::Share, c, strlen(c));
assert(d <= c);
Data c1(d); // copy, null terminate
assert(d <= c1);
assert(c1 <= d);
}
}
// test assignment
{
{
Data d("sadfsa");
d = "gasdfg";
assert(d == "gasdfg");
}
{
Data d;
d = "gasdfg";
assert(d == "gasdfg");
}
{
Data d("sdfsdf");
Data e(d);
Data f("fsdgsdafg");
Data g(f);
e = g;
assert(e == g);
}
}
{
// test resizing
Data header(10, Data::Preallocate);
assert(header.empty());
header += 'c';
header += " char";
header += "acters";
assert(header.size() > 10);
cerr << header << endl;
assert(header == "c characters");
}
{
// test resizing
Data header(10, Data::Preallocate);
assert(header.empty());
header += 'c';
header += " char";
header += Data("acters");
assert(header.size() > 10);
cerr << header << endl;
assert(header == "c characters");
}
{
// test resizing
Data header(120, Data::Preallocate);
assert(header.empty());
header += 'c';
header += " char";
header += "acters";
assert(header == "c characters");
}
{
const char *txt = "here is some text";
Data notOwner(Data::Share, txt, strlen(txt));
assert(notOwner.mShareEnum == Data::Share);
notOwner += " more text";
assert(notOwner.mShareEnum == Data::Take);
assert(notOwner == "here is some text more text");
}
{
const char *txt = "here is some text";
Data notOwner(Data::Share, txt, strlen(txt));
assert(notOwner.mShareEnum == Data::Share);
notOwner += '!';
assert(notOwner.mShareEnum == Data::Take);
assert(notOwner == "here is some text!");
}
{
const char *txt = "here is some text";
Data notOwner(Data::Share, txt, strlen(txt));
assert(notOwner.mShareEnum == Data::Share);
notOwner += Data(" more text");
assert(notOwner.mShareEnum == Data::Take);
assert(notOwner == "here is some text more text");
}
{
Data v("some text");
assert(v.prefix("some"));
assert(v.prefix("some "));
assert(!v.prefix("ome "));
assert(!v.prefix("some more text"));
assert(v.prefix(Data::Empty));
assert(v.prefix("some text"));
assert(v.prefix(v));
assert(!v.prefix("some text "));
}
{
Data v("some text");
assert(v.postfix("text"));
assert(v.postfix(" text"));
assert(!v.postfix("tex"));
assert(!v.postfix("more some text"));
assert(v.postfix(Data::Empty));
assert(v.postfix("some text"));
assert(v.postfix(v));
assert(!v.postfix(" some text"));
}
{
Data transport("transport");
assert(isEqualNoCase(transport, "transport"));
}
{
Data d1("0123456789");
assert(d1.find("0") == 0);
assert(d1.find("1") == 1);
assert(d1.find("8") == 8);
assert(d1.find("9") == 9);
assert(d1.find("01") == 0);
assert(d1.find("12") == 1);
assert(d1.find("a") == Data::npos);
assert(d1.find("0123456789") == 0);
assert(d1.find("0123456789a") == Data::npos);
Data d2;
assert(d2.find("0") == Data::npos);
assert(d2.find("abc") == Data::npos);
assert(d2.find("") == Data::npos);
}
{
Data d1("abcdefghi");
assert(d1.find("def") == 3);
assert(d1.find("def", 3) == 3);
assert (d1.substr(d1.find("def"), 3) == "def");
cerr << "substr = " << d1.substr(5,4) << endl;
}
{
Data d1("http://123456/123");
assert(d1.find("/") == 5);
assert(d1.find("/", 7) == 13);
}
{
Data d1("0");
Data d2("0");
d1 ^= d2;
cerr << d1.hex() << endl;
assert(d1.size() == 1);
assert(d1[0] == 0);
d1 = "0";
d1 ^= Data();
cerr << d1.hex() << endl;
assert(d1.size() == 1);
assert(d1[0] == '0');
d1 = Data();
d1 ^= Data("0");
cerr << d1.hex() << endl;
assert(d1.size() == 1);
assert(d1[0] == '0');
d1 = Data();
d1 ^= Data();
cerr << d1.hex() << endl;
assert(d1.size() == 0);
d1 = "01234";
d1 ^= Data("01234");
cerr << d1.hex() << endl;
assert(d1.size() == 5);
assert(d1[0] == 0);
assert(d1[4] == 0);
d1 = "012";
d1 ^= Data("01234");
cerr << d1.hex() << endl;
assert(d1.size() == 5);
assert(d1[0] == 0);
assert(d1[1] == 0);
assert(d1[2] == 0);
assert(d1[3] == '3');
assert(d1[4] == '4');
d1 ^= Data("01234");
cerr << d1.hex() << endl;
assert(d1[0] == '0');
assert(d1[1] == '1');
assert(d1[2] == '2');
assert(d1[3] == 0);
assert(d1[4] == 0);
d1 = Data(100, Data::Preallocate);
d1 ^= Data("0");
cerr << d1.hex() << endl;
{
Data buffer;
Data working;
{
DataStream strm(buffer);
strm << "user=phone";
}
working ^= buffer;
buffer.clear();
{
DataStream strm(buffer);
strm << "maddr=192.168.1.1";
}
working ^= buffer;
Data result = working;
working.clear();
buffer.clear();
{
DataStream strm(buffer);
strm << "maddr=192.168.1.1";
}
working ^= buffer;
buffer.clear();
{
DataStream strm(buffer);
strm << "user=phone";
}
working ^= buffer;
assert(result == working);
}
}
{
Data d("012345");
assert(d[0] == '0');
assert(d[1] == '1');
assert(d[2] == '2');
assert(d[3] == '3');
assert(d[4] == '4');
assert(d[5] == '5');
}
{
Data *d = new Data("origin",6);
{
Data * t = d;
d = new Data(*d);
assert(d->size() == t->size());
assert(d->mCapacity == t->mCapacity);
// cout << d->size() << ":" << d->mCapacity << endl;
delete t;
}
delete d;
}
{
char blah[] = "12345";
Data d(blah, 3);
assert(strlen(d.c_str()) == 3);
}
{
assert(Data(0) == "0");
assert(Data(1) == "1");
assert(Data(-1) == "-1");
assert(Data(11) == "11");
assert(Data(1234567) == "1234567");
assert(Data(-1234567) == "-1234567");
}
{
assert(Data(UInt64(0)) == "0");
assert(Data(UInt64(1)) == "1");
assert(Data(UInt64(18446744073709551615ULL)) == "18446744073709551615"); // 2^64 - 1
}
{
cerr << "!! " << Data(true) << endl;
assert(Data(true) == "true");
assert(Data(false) == "false");
}
{
assert(Data('c') == "c");
}
#ifndef RESIP_FIXED_POINT
{
assert(Data(0.21344) == "0.2134");
assert(Data(0.21347) == "0.2135");
assert(Data(-0.21347) == "-0.2135");
assert(Data(-0.21344) == "-0.2134");
cerr << "!! " << Data(-123454.21344, Data::FiveDigitPrecision) << endl;
assert(Data(-123454.21344, Data::FiveDigitPrecision) == "-123454.21344");
assert(Data(-123454.21344, Data::SevenDigitPrecision) == "-123454.21344");
}
#endif
{
Data empt;
Data empt1;
assert(empt.size() == 0);
assert(empt == empt);
assert(empt == empt1);
assert(empt1 == empt);
assert(empt1 == "");
assert(!(empt != empt));
assert(!(empt != empt1));
assert(!(empt1 != empt));
assert(!(empt1 != ""));
assert(empt1 == "");
assert("sdf" != empt1);
assert(Data("SAfdsaf") != empt1);
empt = empt;
empt = empt1;
empt = "sdfasf";
}
{
Data d("qwerty");
cerr << d << endl;
assert(strcmp(d.data(), "qwerty") == 0);
Data e;
assert(e == "");
}
{
Data d("qwerty");
assert(strcmp(d.c_str(), "qwerty") == 0);
Data e;
assert(strcmp(e.c_str(), "") == 0);
}
{
Data d("123");
assert(d.size() == 3);
}
{
Data d("one");
Data c("two");
d += c;
assert(d == "onetwo");
Data empt;
cerr << empt + d << endl;
assert(empt + d == d);
assert(empt + d == "onetwo");
assert(empt + "three" == "three");
}
{
Data s;
s = "c=";
assert(s == "c=");
s += "foo";
assert(s == "c=foo");
s += "\r\n";
s += "bar";
s += "\r\n";
assert (s == "c=foo\r\nbar\r\n");
}
{
Data s;
s += 'c';
assert(s == "c");
assert(s.size() == 1);
}
{
Data s;
s = "c=";
assert(s == "c=");
s += 'f';
assert(s == "c=f");
assert(s.size() == 3);
}
{
Data s;
s = "some text";
s += Data::Empty;
assert(s == "some text");
}
{
Data a("one");
Data b("two");
Data c("three");
assert(a+b+c == "onetwothree");
}
{
Data d("one");
cerr << "one + two = " << (d + "two") << endl;
assert((d + "two") == "onetwo");
}
{
cerr << "test MD5" << endl;
Data d;
assert(d.md5() == "d41d8cd98f00b204e9800998ecf8427e");
Data d1("qwertyuiop");
assert(d1.md5() == "6eea9b7ef19179a06954edd0f6c05ceb");
}
{
Data mixed("MiXed");
mixed.lowercase();
assert(mixed == "mixed");
}
{
Data mixed("miXed");
mixed.uppercase();
assert(mixed == "MIXED");
}
{
Data a("a");
Data aa(a);
assert(a.size() == aa.size());
}
{
Data d("ssd");
Data c;
d = c;
assert(d.empty());
}
{
Data d;
Data c;
assert(!(d != c));
d = c;
assert(d.empty());
}
{
char s[] = "userB@whistler.gloo.net:6062\r\nCo\031";
char o[] = "S";
Data d(Data::Share, s, strlen(s));
Data c(Data::Share, o, strlen(o));
d = c;
assert(c == "S");
}
{
Data d((unsigned long)235235);
assert(d == "235235");
}
if (1)
{
Data d3("MTIz"); Data e3("123" );
//cerr << "base64 test " <<e3<< " = "<< d3.base64decode().c_str()<<endl;
//cerr << "base64 test " <<d3<< " = "<< e3.base64encode().c_str()<<endl;
assert( d3.base64decode() == e3 );
assert( e3.base64encode() == d3 );
Data d1("MQ=="); Data e1("1" );
//cerr << "base64 test "<<e1<<" = <"<<d1.base64decode()<<">"<<endl;
//cerr << "base64 test hex "<<e1.hex()<<" = <"<<d1.base64decode().hex()<<">"<<endl;
//cerr << "base64 test "<<d1<<" = <"<<e1.base64encode()<<">"<<endl;
assert( e1 == d1.base64decode() );
assert( e1.base64encode() == d1 );
Data d2("MTI=");
assert( d2.base64decode() == Data("12" ) );
assert( Data("12" ).base64encode() == d2 );
Data d4("MTIzNA==");
assert( d4.base64decode() == Data("1234" ) );
assert( Data("1234" ).base64encode() == d4 );
Data d5("MTIzNDU=");
assert( d5.base64decode() == Data("12345" ) );
assert( Data("12345" ).base64encode() == d5 );
Data d6("MTIzNDU2");
assert( d6.base64decode() == Data("123456" ) );
assert( Data("123456" ).base64encode() == d6 );
Data d7("MTIzNDU2Nw==");
assert( d7.base64decode() == Data("1234567" ) );
assert( Data("1234567" ).base64encode() == d7 );
}
for(int i=0; i<4; ++i)
{
const char* buf1="5d7a9b7c02034b5b";
const char* buf2=" 5d7a9b7c02034b5b";
const char* buf3=" 5d7a9b7c02034b5b";
const char* buf4=" 5d7a9b7c02034b5b";
const char* ubuf1="5D7A9B7C02034B5B";
const char* ubuf2=" 5D7A9B7C02034B5B";
const char* ubuf3=" 5D7A9B7C02034B5B";
const char* ubuf4=" 5D7A9B7C02034B5B";
Data d1(Data::Share, buf1, 16-i);
Data d2(Data::Share, buf2+1, 16-i);
Data d3(Data::Share, buf3+2, 16-i);
Data d4(Data::Share, buf4+3, 16-i);
Data u1(Data::Share, ubuf1, 16-i);
Data u2(Data::Share, ubuf2+1, 16-i);
Data u3(Data::Share, ubuf3+2, 16-i);
Data u4(Data::Share, ubuf4+3, 16-i);
// All of these point to the same data, but aligned differently.
assert(d1.hash()==d2.hash());
assert(d1.hash()==d3.hash());
assert(d1.hash()==d4.hash());
assert(d1.hash()!=u1.hash());
assert(d1.hash()!=u2.hash());
assert(d1.hash()!=u3.hash());
assert(d1.hash()!=u4.hash());
assert(d1.caseInsensitivehash()==d2.caseInsensitivehash());
assert(d1.caseInsensitivehash()==d3.caseInsensitivehash());
assert(d1.caseInsensitivehash()==d4.caseInsensitivehash());
assert(d1.caseInsensitivehash()==u1.caseInsensitivehash());
assert(d1.caseInsensitivehash()==u2.caseInsensitivehash());
assert(d1.caseInsensitivehash()==u3.caseInsensitivehash());
assert(d1.caseInsensitivehash()==u4.caseInsensitivehash());
assert(d1.caseInsensitiveTokenHash()==d2.caseInsensitiveTokenHash());
assert(d1.caseInsensitiveTokenHash()==d3.caseInsensitiveTokenHash());
assert(d1.caseInsensitiveTokenHash()==d4.caseInsensitiveTokenHash());
assert(d1.caseInsensitiveTokenHash()==u1.caseInsensitiveTokenHash());
assert(d1.caseInsensitiveTokenHash()==u2.caseInsensitiveTokenHash());
assert(d1.caseInsensitiveTokenHash()==u3.caseInsensitiveTokenHash());
assert(d1.caseInsensitiveTokenHash()==u4.caseInsensitiveTokenHash());
assert(d1.caseInsensitiveTokenCompare(d1));
assert(d1.caseInsensitiveTokenCompare(d2));
assert(d1.caseInsensitiveTokenCompare(d3));
assert(d1.caseInsensitiveTokenCompare(d4));
assert(d1.caseInsensitiveTokenCompare(u1));
assert(d1.caseInsensitiveTokenCompare(u2));
assert(d1.caseInsensitiveTokenCompare(u3));
assert(d1.caseInsensitiveTokenCompare(u4));
assert(d2.caseInsensitiveTokenCompare(d1));
assert(d2.caseInsensitiveTokenCompare(d2));
assert(d2.caseInsensitiveTokenCompare(d3));
assert(d2.caseInsensitiveTokenCompare(d4));
assert(d2.caseInsensitiveTokenCompare(u1));
assert(d2.caseInsensitiveTokenCompare(u2));
assert(d2.caseInsensitiveTokenCompare(u3));
assert(d2.caseInsensitiveTokenCompare(u4));
assert(d3.caseInsensitiveTokenCompare(d1));
assert(d3.caseInsensitiveTokenCompare(d2));
assert(d3.caseInsensitiveTokenCompare(d3));
assert(d3.caseInsensitiveTokenCompare(d4));
assert(d3.caseInsensitiveTokenCompare(u1));
assert(d3.caseInsensitiveTokenCompare(u2));
assert(d3.caseInsensitiveTokenCompare(u3));
assert(d3.caseInsensitiveTokenCompare(u4));
assert(d4.caseInsensitiveTokenCompare(d1));
assert(d4.caseInsensitiveTokenCompare(d2));
assert(d4.caseInsensitiveTokenCompare(d3));
assert(d4.caseInsensitiveTokenCompare(d4));
assert(d4.caseInsensitiveTokenCompare(u1));
assert(d4.caseInsensitiveTokenCompare(u2));
assert(d4.caseInsensitiveTokenCompare(u3));
assert(d4.caseInsensitiveTokenCompare(u4));
assert(u1.caseInsensitiveTokenCompare(d1));
assert(u1.caseInsensitiveTokenCompare(d2));
assert(u1.caseInsensitiveTokenCompare(d3));
assert(u1.caseInsensitiveTokenCompare(d4));
assert(u1.caseInsensitiveTokenCompare(u1));
assert(u1.caseInsensitiveTokenCompare(u2));
assert(u1.caseInsensitiveTokenCompare(u3));
assert(u1.caseInsensitiveTokenCompare(u4));
assert(u2.caseInsensitiveTokenCompare(d1));
assert(u2.caseInsensitiveTokenCompare(d2));
assert(u2.caseInsensitiveTokenCompare(d3));
assert(u2.caseInsensitiveTokenCompare(d4));
assert(u2.caseInsensitiveTokenCompare(u1));
assert(u2.caseInsensitiveTokenCompare(u2));
assert(u2.caseInsensitiveTokenCompare(u3));
assert(u2.caseInsensitiveTokenCompare(u4));
assert(u3.caseInsensitiveTokenCompare(d1));
assert(u3.caseInsensitiveTokenCompare(d2));
assert(u3.caseInsensitiveTokenCompare(d3));
assert(u3.caseInsensitiveTokenCompare(d4));
assert(u3.caseInsensitiveTokenCompare(u1));
assert(u3.caseInsensitiveTokenCompare(u2));
assert(u3.caseInsensitiveTokenCompare(u3));
assert(u3.caseInsensitiveTokenCompare(u4));
assert(u4.caseInsensitiveTokenCompare(d1));
assert(u4.caseInsensitiveTokenCompare(d2));
assert(u4.caseInsensitiveTokenCompare(d3));
assert(u4.caseInsensitiveTokenCompare(d4));
assert(u4.caseInsensitiveTokenCompare(u1));
assert(u4.caseInsensitiveTokenCompare(u2));
assert(u4.caseInsensitiveTokenCompare(u3));
assert(u4.caseInsensitiveTokenCompare(u4));
}
std::cerr << "All OK" << endl;
return 0;
}

1.7.5.1