/// <summary> /// Compare speed to StringBuilder. /// </summary> public static void SpeedTest() { Logger log = new Logger("CharBuffer: SpeedTest"); log.Info("Starting..."); char c = 'a'; string s = null; int cycles = 1000000; // a sequence of common ops StringBuilder sb = new StringBuilder(); DateTime startTime = HighResClock.Now; for(int i = 0; i < cycles; i++) { sb.Append(c); sb.Append(c); sb.Append(c); sb.Append(c); sb.Append("hello"); s = sb.ToString(); sb.Length = 0; } log.Info("StringBuilder paces took: {0} us", (HighResClock.Now - startTime).TotalMilliseconds * 1000.0/cycles); // a sequence of common ops CharBuffer cb = new CharBuffer(16); // match StringBuilder's default length startTime = HighResClock.Now; for(int i = 0; i < cycles; i++) { cb.Append(c); cb.Append(c); cb.Append(c); cb.Append(c); cb.Append("hello"); s = cb.ToString(); cb.Length = 0; } log.Info("CharBuffer paces took: {0} us", (HighResClock.Now - startTime).TotalMilliseconds * 1000.0/cycles); log.Info("Done."); }
/// <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); }