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);
        }
예제 #2
0
        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);
        }