rendered paste bodyunittest
{
string s = string("foo"c);
string t = string("Oh noes!"w);
string u = string("% on a plne!"d);
string v = string(string(string("WAaah! D:"c)[0..2].toUTF16() ~ "arrr! D:"w).toUTF32()); // make some chaos thingie
assert(s.type() == typeid(typeof("foo"c)));
assert(s.type() != typeid(typeof("Oh noes!"w)));
assert(t.type() != typeid(typeof("% on a plne!"d)));
assert(v.type() == u.type() );
assert(s.startsWith("f"c));
assert(s.startsWith("fo"w));
assert(s.startsWith("foo"c));
assert(!s.startsWith("fooo"c));
assert(!s.startsWith("F"c));
assert(s.startsWith("F"c, true));
assert(!s.startsWith("E"c, true));
assert(s.endsWith("o"c));
assert(s.endsWith("oo"d));
assert(s.endsWith("foo"c));
assert(!s.endsWith("fooo"c));
assert(!s.endsWith("ooo"c));
assert(s.endsWith("O"c, true));
assert(!s.endsWith("P"c, true));
assert((s.dup ~ t.dup ~ u.dup ~ v.dup).startsWith(s));
assert((s.dup ~ t.dup ~ u.dup ~ v.dup).endsWith(v));
int i;
s = string("The quick brown fox jumped over the lazy dog."w);
i = s.find("Lazy"c, true);
assert(-1 != i);
assert(s[i .. i + 4] == "lazy"c);
i = s.find("Lazy"c, false);
assert(-1 == i);
i = s.find("."c, true);
assert(-1 != i);
i = s.find("dog."c, true);
assert(-1 != i);
i = s.find(string("jumped"d), false);
assert(-1 != i);
wchar[] ws = "Arrrrr!";
assert(!(s == "oof"c));
assert(!(t == "oh nes!"w));
assert(!(t == u));
assert(!(t == s));
assert(!(s == u));
assert(string("foo"c) == s);
assert(s == "foo"c);
assert(ws == string(ws));
assert(!(ws > string(ws)));
assert(!(ws < string(ws)));
assert(ws == string(ws)[0 .. ws.length]);
assert(!(ws > string(ws)[0 .. ws.length]));
assert(!(ws < string(ws)[0 .. ws.length]));
assert(ws == string(ws).toUTF16());
assert(ws == string(string(ws).toString()).toUTF16);
assert(ws <= (string(ws) ~ ws));
assert(ws >= string(ws)[0..ws.length / 2]);
string s2;
s2 = s.dup;
assert(s.type != s2.type); // Compacted.
assert(s == s2); // Same value.
foreach ( uint i, inout dchar ch; u ) {
t[i] = ch;
s[s.length - i] = ch;
}
u ~= "\u0164" ~ "\u0020" ~ "\u9876"; // just to be funny and prevent from compacting ;)
assert( t.dup().type( ) == t.type() );
u.compact();
v.compact();
assert( s.type( ) != u.type( ) );
assert( s.length < s.MAX_LENGTH );
s = string();
t.cleanup();
u = string();
v = string();
assert(s.length == 0);
assert(s.length == t.length);
assert(t.length == 0);
assert(u.length == 0);
assert(v.length == 0);
}