public void NotSupportedGenerate() { // arrange var waveFormGenerator = Substitute.For <WaveformGenerator>(); waveFormGenerator.Generate(Arg.Any <ParameterCollection>(), Arg.Any <ICircuitContext>()).Returns(new Sine()); var waveFormRegistry = Substitute.For <IMapper <WaveformGenerator> >(); waveFormRegistry.ContainsKey("func", true).Returns(true); waveFormRegistry.GetValue(Arg.Any <string>(), Arg.Any <bool>()).Returns(waveFormGenerator); var readingContext = Substitute.For <ICircuitContext>(); readingContext.CaseSensitivity.Returns(new SpiceNetlistCaseSensitivitySettings()); var service = Substitute.For <IResultService>(); service.Validation.Returns(new SpiceNetlistValidationResult()); readingContext.Result.Returns(service); // act + assert WaveformReader waveformReader = new WaveformReader(waveFormRegistry); waveformReader.Generate("func2", new ParameterCollection(), readingContext); Assert.Single(readingContext.Result.Validation); }
public void Generate() { // arrange var waveFormGenerator = Substitute.For <WaveformGenerator>(); waveFormGenerator.Generate(Arg.Any <ParameterCollection>(), Arg.Any <ICircuitContext>()).Returns(new Sine()); var waveFormRegistry = Substitute.For <IMapper <WaveformGenerator> >(); waveFormRegistry.ContainsKey("func", false).Returns(true); waveFormRegistry.GetValue(Arg.Any <string>(), Arg.Any <bool>()).Returns(waveFormGenerator); WaveformGenerator value; waveFormRegistry.TryGetValue("func", false, out value).Returns( x => { x[2] = waveFormGenerator; return(true); }); var readingContext = Substitute.For <ICircuitContext>(); readingContext.CaseSensitivity.Returns(new SpiceNetlistCaseSensitivitySettings()); // act WaveformReader waveformReader = new WaveformReader(waveFormRegistry); var waveForm = waveformReader.Generate("func", new ParameterCollection(), readingContext); // assert Assert.IsType <Sine>(waveForm); }
/// <summary> /// Translates Netlist object mode to SpiceSharp netlist. /// </summary> /// <param name="netlist">A object model of the netlist.</param> /// <returns> /// A new SpiceSharp netlist. /// </returns> public SpiceModel <SpiceSharp.Circuit, Simulation> Read(SpiceNetlist netlist) { if (netlist == null) { throw new System.ArgumentNullException(nameof(netlist)); } // Get result netlist var result = new SpiceModel <Circuit, Simulation>( new Circuit(StringComparerProvider.Get(Settings.CaseSensitivity.IsEntityNameCaseSensitive)), netlist.Title); // Get reading context var resultService = new ResultService(result); var nodeNameGenerator = new MainCircuitNodeNameGenerator( new [] { "0" }, Settings.CaseSensitivity.IsNodeNameCaseSensitive); var objectNameGenerator = new ObjectNameGenerator(string.Empty); INameGenerator nameGenerator = new NameGenerator(nodeNameGenerator, objectNameGenerator); IRandomizer randomizer = new Randomizer( Settings.CaseSensitivity.IsDistributionNameCaseSensitive, seed: Settings.Seed); IExpressionParserFactory expressionParserFactory = new ExpressionParserFactory(Settings.CaseSensitivity); IExpressionFeaturesReader expressionFeaturesReader = new ExpressionFeaturesReader(expressionParserFactory); IExpressionValueProvider expressionValueProvider = new ExpressionValueProvider(expressionParserFactory); EvaluationContext expressionContext = new SpiceEvaluationContext( string.Empty, Settings.EvaluatorMode, Settings.CaseSensitivity, randomizer, expressionParserFactory, expressionFeaturesReader, expressionValueProvider, nameGenerator, resultService); var simulationEvaluationContexts = new SimulationEvaluationContexts(expressionContext); ISimulationPreparations simulationPreparations = new SimulationPreparations( new EntityUpdates(Settings.CaseSensitivity.IsParameterNameCaseSensitive, simulationEvaluationContexts), new SimulationsUpdates(simulationEvaluationContexts)); ICircuitEvaluator circuitEvaluator = new CircuitEvaluator(simulationEvaluationContexts, expressionContext); ISpiceStatementsReader statementsReader = new SpiceStatementsReader(Settings.Mappings.Controls, Settings.Mappings.Models, Settings.Mappings.Components); IWaveformReader waveformReader = new WaveformReader(Settings.Mappings.Waveforms); ICircuitContext circuitContext = new CircuitContext( "Root circuit context", null, circuitEvaluator, simulationPreparations, resultService, nameGenerator, statementsReader, waveformReader, Settings.CaseSensitivity, Settings.Mappings.Exporters, Settings.WorkingDirectory, null); // Set initial seed circuitContext.Evaluator.Seed = Settings.Seed; // Read statements form input netlist using created context circuitContext.Read(netlist.Statements, Settings.Orderer); // Set final seed result.Seed = circuitContext.Evaluator.Seed; return(result); }