public void RandomTest() { var charset = Resources.TestCharSet; var test = new StringBuilder(512); var random = new Random(); ForegroundColor = ConsoleColor.Green; Write(" Running Test: 0 %"); for (int cycle = 0; cycle < 10; cycle++) { for (int i = 0; i < 1000; i++) { test.Clear(); var length = random.Next(512); while (length-- > 0) { test.Append(charset, random.Next(charset.Length), 1); } var compressed = Smaz.Compress(test.ToString()); var decompressed = Smaz.Decompress(compressed); Assert.AreEqual(test.ToString(), decompressed, "Random failed for: '{0}'", test); } SetCursorPosition(19, CursorTop); Write($"{(cycle + 1) * 10:###} %"); } SetCursorPosition(0, CursorTop); }
/// <summary> /// Test SmazSharp Compression Performance, assume compliance (via other tests) /// </summary> public void CompressPerfTest(int Cycles, int Iterations) { ForegroundColor = ConsoleColor.Yellow; WriteLine("------"); WriteLine("Testing Compression Performance"); ForegroundColor = ConsoleColor.Gray; WriteLine($" Cycles: {Cycles:N0}"); WriteLine($" Iterations: {Iterations:N0}"); #if DEBUG Assert.Inconclusive("Cannot run performance tests in Debug"); #endif Assert.IsTrue(Cycles > 0, "The number of Cycles must be greater than 0"); Assert.IsTrue(Iterations > 0, "The number of Iterations must be greater than 0"); ForegroundColor = ConsoleColor.Green; Write(" Running Tests: 0 %"); var testBytes = Resources.TestStrings.Select(s => Encoding.ASCII.GetBytes(s)).ToArray(); long[] results = new long[Cycles]; byte[] result; // Warm Up for (int i = 0; i < testBytes.Length; i++) { result = Smaz.Compress(testBytes[i]); } // Run Cycles for (int cycle = 0; cycle < Cycles; cycle++) { // Run Iterations Stopwatch sw = new Stopwatch(); sw.Start(); for (int iteration = 0; iteration < Iterations; iteration++) { Smaz.Decompress(testBytes[iteration % testBytes.Length]); } sw.Stop(); results[cycle] = sw.ElapsedTicks; SetCursorPosition(17, CursorTop); Write($"{(100 / (double)Cycles) * (cycle + 1):N0} %"); } SetCursorPosition(0, CursorTop); WriteLine(" Tests Complete "); WriteLine($" Cycles (ms): {string.Join(", ", results.Select(r => (r / TimeSpan.TicksPerMillisecond).ToString("N1")))}"); WriteLine($" Cycle Average: {results.Average() / TimeSpan.TicksPerMillisecond:N2} milliseconds"); WriteLine($" Average: {results.Average() / Iterations:N5} ticks/operation"); ForegroundColor = ConsoleColor.Yellow; WriteLine("Compression Performance Testing Complete"); WriteLine("------"); ForegroundColor = ConsoleColor.Gray; WriteLine(); }
public void CompressTest() { for (int i = 0; i < Resources.TestStrings.Length; i++) { var test = Resources.TestStrings[i]; var compressedOk = Resources.TestStringsCompressed[i]; var compressedTest = Smaz.Compress(test); // Compare Length if (compressedOk.Length != compressedTest.Length) { Assert.Fail("Compression failed for: '{0}'", test); } // Compare Data for (int c = 0; c < compressedOk.Length; c++) { if (compressedOk[c] != compressedTest[c]) { Assert.Fail("Compression failed for: '{0}'", test); } } } }