/// <summary>
/// Simple self test.
/// </summary>
/// <returns>bool - true for test passed, false otherwise</returns>
public static bool TestSelf()
{
Logger log = new Logger("CharBuffer: TestSelf");
log.Info("Starting...");
// Append
CharBuffer cb = new CharBuffer();
cb.Append('a'); cb.Append('b'); cb.Append('c');
log.Info("cb after Append: '{0}'", cb);
if (cb[0] != 'a') { log.Error("Append or indexer failed."); return (false); }
if (cb[1] != 'b') { log.Error("Append or indexer failed."); return (false); }
if (cb[2] != 'c') { log.Error("Append or indexer failed."); return (false); }
// Append string
cb.Append("_hello");
log.Info("cb after Append string: '{0}'", cb);
if (cb[4] != 'h') { log.Error("Append or indexer failed."); return (false); }
// Clear
cb.Clear();
if (cb.Length != 0) { log.Error("Clear failed."); return (false); }
log.Info("cb after Clear: '{0}'", cb);
// Grow
cb = new CharBuffer(0);
for (int i = 0; i < 33; i++) cb.Append('a');
log.Info("cb after Growth: '{0}'", cb);
if (cb[32] != 'a') { log.Error("Append or indexer failed."); return (false); }
// IndexOf
cb.Clear();
cb.Append("This is a sentence");
if (cb.IndexOf('a') != 8) { log.Error("IndexOf failed."); return (false); }
// remove
cb.Remove(0);
log.Info("cb after Remove: '{0}'", cb);
if (cb.IndexOf('a') != 7) { log.Error("IndexOf failed."); return (false); }
cb.Remove(1);
log.Info("cb after Remove: '{0}'", cb);
if (cb.IndexOf('i') != 3) { log.Error("IndexOf failed."); return (false); }
cb.Remove(2, 4);
log.Info("cb after Remove: '{0}'", cb);
if (cb[4] != 's') { log.Error("IndexOf failed."); return (false); }
// use as a ring
log.Info("Test ring buffer:");
cb = new CharBuffer(16);
for (int i = 0; i < 32; i++)
{
cb.Append("hello");
if (!cb.ToString().Equals("hello")) { log.Error("Not hello after append."); return (false); }
cb.Remove(0, 5);
if (cb.Length != 0) { log.Error("Len wrong after remove."); return (false); }
}
log.Info("Done.");
return (true);
}