public void AdaptedFriis() { // arrange var comArgs = new WirelessCommArgs(); var radioArgs = base.GetRadioArgs(); var sceneArgs = new InvariantSceneArgs(); var netArgs = new NetworkArgs(); // TODO: add the runtime and secure the existence of needed arguments commArgs and sceneArgs var sim = new AdaptedFriisSimulator() .With(radioArgs) // own arguments .With(comArgs) // additional arguments... .With(sceneArgs) .With(netArgs); // false positive sim.OnExecuting += (obj, e) => { _log.Trace($"{obj} started"); }; sim.Executed += (obj, e) => { _log.Trace($"{obj} finished"); }; // act sim.Run(); // assert Assert.IsTrue(radioArgs.RxValues.All(f => f != 0), "float should contain a attenuation"); radioArgs.RxPositions .Zip(radioArgs.RxValues, (a, b) => $"Pos: {a.ToString()} with {b} dBm") .ToList(); }
public void RunAdaptedFriis() { // arrange var sim = new AdaptedFriisSimulator(); sim.OnExecuting += (o, e) => { _log.Trace($"{e.Arguments.Name} started"); }; sim.Executed += (o, e) => { _log.Trace($"{e.Arguments.Name} finished"); }; // act sim.OnStart().Run(); var radioArgs = sim.Arguments as AdaptedFriisArgs; // assert Assert.IsTrue(radioArgs.RxValues.All(f => f != 0), "float should contain a attenuation"); radioArgs.RxPositions .Zip(radioArgs.RxValues, (a, b) => $"Pos: {a} with {b} dBm") .ToList() .ForEach(s => _log.Trace(s)); }
private static Runner InitializeRuntime() { var runner = new Runner(); runner.Started += (o, e) => { _log.Trace($"Runner started."); }; runner.IterationPassed += (o, e) => { _log.Trace($"Runner passed iteration"); }; runner.Stopped += (o, e) => { _log.Trace($"Runner stopped."); }; // radio channel var radioSim = new AdaptedFriisSimulator(); radioSim.With((args) => { var radioArgs = args as AdaptedFriisArgs; radioArgs.RadioBox.Resolution = 0.2F; }); // energy var batterySim = new BatteryPackSimulator(); batterySim.With((args) => { var batteryArgs = args as BatteryArgs; var battery = batteryArgs.AddBattery(); batteryArgs.UpdateDischargeCurrent(battery.Uid, 100); }); // network var networkSim = new MeshNetworkSimulator(); BuildMeshNetwork(networkSim.Arguments as MeshNetworkArgs); // pack all simulators in a reop var simRepo = new SimulatorRepository(); simRepo.AddRange(new ISimulatable[] { radioSim, networkSim, batterySim }); runner.BindSimulators(simRepo); return(runner); }
public async Task SimulateRuntimeAsync() { // -- arrange // radio channel var radioSim = new AdaptedFriisSimulator(); radioSim.With((args) => { var radioArgs = args as AdaptedFriisArgs; radioArgs.RadioBox.Resolution = 0.2F; }); // energy var batterySim = new BatteryPackSimulator(); batterySim.With((args) => { var batteryArgs = args as BatteryArgs; var battery = batteryArgs.AddBattery(); batteryArgs.UpdateDischargeCurrent(battery.Uid, 100); }); // network var networkSim = new MeshNetworkSimulator(); BuildMeshNetwork(networkSim.Arguments as MeshNetworkArgs); // pack all simulators in a reop var simRepo = new SimulatorRepository(); simRepo.AddRange(new ISimulatable[] { radioSim, networkSim, batterySim }); // runtime var runner = new Runner(); runner.BindSimulators(simRepo); runner.Started += (o, e) => { _log.Trace($"Runner started."); }; runner.IterationPassed += (o, e) => { _log.Trace($"Runner passed iteration"); }; runner.Stopped += (o, e) => { _log.Trace($"Runner stopped."); }; // -- act int iterations = 5; if (!runner.Validate()) { Assert.Fail("Error on validating the simulation runtime."); } _log.Trace($"RunAsync for {iterations} times"); await runner.RunAsync(iterations); // -- assert var runArgs = runner.Arguments as RuntimeArgs; Assert.IsTrue(runArgs.Iterations == 5, $"simulation should have passed {iterations} iterations"); }