private void ReadGraphData(UUTReport unitTestReport, string[] columns, string measureName, string xUnit, string yUnit, ref double[] xValues) { List <double> values = new List <double>(); for (int i = 3; i < columns.Length; i++) { if (!string.IsNullOrEmpty(columns[i])) { values.Add(double.Parse(columns[i], cultureInfo)); } } if (xValues == null) { xValues = values.ToArray(); return; } NumericLimitStep numericLimitStep = unitTestReport.GetRootSequenceCall().AddNumericLimitStep(measureName); Chart chart = numericLimitStep.AddChart(ChartType.LineLogY, measureName, "X", xUnit, "Y", yUnit); chart.AddSeries(measureName, xValues, values.ToArray()); xValues = null; }
private void ReadDataFile(UUTReport uut, string fileName) { string[] seqName = Path.GetFileNameWithoutExtension(fileName).Split(new char[] { '-' }); if (currentSequence == null || currentSequence.Name != seqName[0]) { currentSequence = uut.GetRootSequenceCall().AddSequenceCall(seqName[0]); } using (TextReader reader = new StreamReader(fileName)) { string line = reader.ReadLine(); string[] headers = line.Split(new char[] { '\t' }); line = reader.ReadLine(); List <double> x = new List <double>(); List <double> y = new List <double>(); List <double> min = new List <double>(); List <double> max = new List <double>(); while (line != null) { if (headers[0] == "name") //Single measure { NumericLimitStep numericLimitStep = currentSequence.AddNumericLimitStep(line.Split(new char[] { '\t' }).First()); double[] values = ReadDoubles(line); //Format: name value max min if (double.IsNaN(values[2])) //No limits { numericLimitStep.AddTest(values[1], ""); } else if (!double.IsNaN(values[3]) && !double.IsNaN(values[2])) { numericLimitStep.AddTest(values[1], CompOperatorType.GELE, values[3], values[2], ""); } else { throw new NotImplementedException("Assumed no limits or max / min"); } } else if (headers[0] == "frq") { double[] values = ReadDoubles(line); if (values.Length == 1) { } //No Y value, skip else { x.Add(values[0]); y.Add(values[1]); if (values.Length == 4) { max.Add(values[2]); min.Add(values[3]); } else if (values.Length == 3) { max.Add(values[2]); } else { throw new NotImplementedException("Assumed x,y,min,max or x,y,max"); } } } else { throw new NotImplementedException("Assumed either name or frq in header"); } line = reader.ReadLine(); } if (headers[0] == "frq") { NumericLimitStep numericLimitStep = currentSequence.AddNumericLimitStep(headers[1]); numericLimitStep.AddMultipleTest(y.Average(), "Hz", "avg"); if (min.Count > 0) { numericLimitStep.AddMultipleTest(y.Min(), "Hz", "min"); } if (max.Count > 0) { numericLimitStep.AddMultipleTest(y.Max(), "Hz", "max"); } int errorCount = 0; for (int i = 0; i < y.Count; i++) { if (i < max.Count && double.IsNaN(max[i])) //Skip if limit is Nan or not exist { continue; } if (i < min.Count && double.IsNaN(min[i])) { continue; } if (y[i] > max[i]) { errorCount++; } if (min.Count > 0 && y[i] < min[i]) { errorCount++; } } numericLimitStep.AddMultipleTest(errorCount, CompOperatorType.LT, 1, "#", "OutOfBounds"); Chart chart = numericLimitStep.AddChart(ChartType.LineLogX, headers[1], "Frequency", "Hz", "res", ""); chart.AddSeries("values", x.ToArray(), y.ToArray()); if (min.Count > 0) { chart.AddSeries("min", x.ToArray(), min.ToArray()); } if (max.Count > 0) { chart.AddSeries("max", x.ToArray(), max.ToArray()); } } } }