Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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");
        }