public static BenchmarkResult Parse(string file) { var result = new BenchmarkResult(); string[] lines = File.ReadAllLines(file); int i = 0; for (; i < lines.Length; ++i) { if (lines[i].StartsWith('|')) { break; } result.Header.Add(lines[i]); } result.Table = Table.Parse(lines, i); return(result); }
private static BenchmarkResult Merge(BenchmarkResult before, BenchmarkResult after, string[] compareColumns) { if (!before.Header.SequenceEqual(after.Header)) { throw new InvalidOperationException($@"Differences were found in the benchmark execution environments. BEFORE: {string.Join(Environment.NewLine, before.Header)} AFTER: {string.Join(Environment.NewLine, after.Header)}"); } var result = new BenchmarkResult { Header = before.Header }; foreach (var column in before.Table.Columns) { if (compareColumns.Contains(column.Name)) { result.Table.Columns.Add(new Column { Name = column.Name + " [base]", Alignment = Alignment.Right }); result.Table.Columns.Add(new Column { Name = column.Name + " [current]", Alignment = Alignment.Right }); result.Table.Columns.Add(new Column { Name = column.Name + " [% of base]", Alignment = Alignment.Right }); } else { result.Table.Columns.Add(new Column { Name = column.Name, Alignment = Alignment.Left }); } } for (int row = 0; row < before.Table.RowCount; ++row) { var resultList = new List <string>(); for (int column = 0; column < before.Table.ColumnCount; ++column) { string name = before.Table.Columns[column].Name; string beforeValue = before.Table.Rows[row][column]; string afterValue = after.Table.Rows[row][column]; if (compareColumns.Contains(name)) { resultList.Add(beforeValue); resultList.Add(afterValue); resultList.Add(GetDifference(beforeValue, afterValue)); } else { if (beforeValue != afterValue) { throw new InvalidOperationException($"Different values in column '{name}': {beforeValue} | {afterValue}. Add this column either in --exclude or --compare command line switch."); } resultList.Add(beforeValue); } } result.Table.Rows.Add(resultList); } return(result); }