/// <summary> /// Compares the two circuits for the specified simulation. /// </summary> /// <param name="simulation">The simulation.</param> /// <param name="cktReference">The reference circuit.</param> /// <param name="cktActual">The actual circuit.</param> /// <param name="exports">The exports to be compared.</param> public void Compare(IEventfulSimulation simulation, IEntityCollection cktReference, IEntityCollection cktActual, IExport <double>[] exports) { var results = new List <double>(); void StoreResults(object sender, ExportDataEventArgs args) { foreach (var export in exports) { results.Add(export.Value); } } var index = 0; void CompareResults(object sender, ExportDataEventArgs args) { foreach (var export in exports) { var expected = results[index++]; var actual = export.Value; var tol = Math.Max(Math.Abs(expected), Math.Abs(actual)) * CompareRelTol + CompareAbsTol; Assert.AreEqual(expected, actual, tol); } } // Store results simulation.ExportSimulationData += StoreResults; simulation.Run(cktReference); simulation.ExportSimulationData -= StoreResults; // Compare to second circuit simulation.ExportSimulationData += CompareResults; simulation.Run(cktActual); simulation.ExportSimulationData -= CompareResults; }
/// <summary> /// Initializes a new instance of the <see cref="GenericExport{T}"/> class. /// </summary> /// <param name="simulation">The simulation.</param> /// <param name="extractor">The function for extracting information.</param> public GenericExport(IEventfulSimulation simulation, Func <T> extractor) : base(simulation) { _myExtractor = extractor.ThrowIfNull(nameof(extractor)); }