public static void Main(string[] args) { // Command Line Control //----------------------------------------------------------------- try { CommandInterpreter ci = new CommandInterpreter(args); Console.WriteLine(); if (ci.Encoding == Encoding.ASCII) { AsciiFileReader reader = new AsciiFileReader(ci); RunAsciiTestOnce(reader.Data, ci.QueryString, ci.NumOfRuns); } else { BinaryFileReader reader = new BinaryFileReader(ci); RunBinaryTestOnce(reader.Data, MakeBitArray(ci.QueryString), ci.NumOfRuns); } } catch (ArgumentException ex) { Console.WriteLine(ex.Message); } //----------------------------------------------------------------- // Or Create the Test Input Files and Run the Tests //----------------------------------------------------------------- //CreateTestFiles(); //RunAsciiTestFiles(); //RunBinaryTestFiles(); //----------------------------------------------------------------- // Or Run an Ad-Hoc Test //----------------------------------------------------------------- //RunAsciiTestOnce("abracadabra", "abra"); //RunBinaryTestOnce(MakeBitArray("111001101"), MakeBitArray("01")); //----------------------------------------------------------------- }
public static void RunBinaryTestFiles() { const string DirectoryString = @"..\.."; var gen = new Random(); var files = Directory.EnumerateFiles(DirectoryString + @"\GenFiles\", "*").Where(u => u.Contains(@"GenFiles\B_")); StringBuilder output = new StringBuilder(); int fileNum = 0; foreach (var file in files) { var ob = new StatObj { FileName = file }; var commandLineInterpreter = new CommandInterpreter() { Encoding = Encoding.Default, Path = ob.FileName }; var fileReader = new BinaryFileReader(commandLineInterpreter); var sa = new SuffixArrayBin(fileReader.Data); var bwt = new BurrowsWheelerTransformBin(sa); for (var i = 1; i < Math.Min(20, ob.FileSize / 2); i++) { ob.PatternSize = i; BitArray pattern = fileReader.Data.Substring( (int)( (ob.FileSize - ob.PatternSize) * gen.NextDouble() ), ob.PatternSize ); // Settings and timers //=============================================================== int times = 100; Stopwatch sw; //=============================================================== // BWT //=============================================================== StatObj bwtStat = ob; bwtStat.EndTimeTicks = 0; bwtStat.Results = 0; bwtStat.RuntimeTicks = 0; bwtStat.StartTimeTicks = 0; sw = Stopwatch.StartNew(); for (int t = 0; t < times; t++) { bwtStat.Results = bwt.CountOccurrences(pattern); } sw.Stop(); bwtStat.RuntimeTicks = sw.ElapsedMilliseconds; //=============================================================== // BF //=============================================================== StatObj bfStat = ob; bfStat.EndTimeTicks = 0; bfStat.Results = 0; bfStat.RuntimeTicks = 0; bfStat.StartTimeTicks = 0; sw = Stopwatch.StartNew(); for (int t = 0; t < times; t++) { bfStat.Results = BruteForce.Run(fileReader.Data, pattern); } sw.Stop(); bfStat.RuntimeTicks = sw.ElapsedMilliseconds; //=============================================================== // Print Results //=============================================================== int m = ob.PatternSize; int n = ob.FileSize; output.AppendLine(String.Format("BWT,{0},{1},{2},{3},{4}", bwtStat.RuntimeTicks, m, n, bwtStat.Results, "Binary")); output.AppendLine(String.Format("BruteForce,{0},{1},{2},{3},{4}", bfStat.RuntimeTicks, m, n, bfStat.Results, "Binary")); //=============================================================== } fileNum++; Console.WriteLine(((((double)fileNum) / files.ToArray<string>().Length) * 100).ToString() + " %"); } using (StreamWriter writer = new StreamWriter(DirectoryString + @"\GenFiles\BinaryResults.csv")) { writer.Write(output.ToString()); } }