public void ZeroSpatialDecimation() { var source = Source.From( Enumerable .Range(0, 100) .Select(x => (uint)x) .Select(x => new TimedObject { TachometerCount = x * 50 }) ); var decimator = new SpatialDecimator <TimedObject>(100, 0); var probe = CreateTestProbe(); source.Via(decimator).RunWith(Sink.ActorRef <TimedObject>(probe, new object()), Materializer); var actual = probe.ReceiveN(100); actual.Should().AllBeAssignableTo <TimedObject>(); var msgs = actual.Cast <TimedObject>(); msgs.Should().BeInAscendingOrder(x => x.TachometerCount); msgs.Select(x => x.TachometerCount).Should().BeEquivalentTo(Enumerable.Range(0, 100).Select(x => x * 50)); }
public void RepeatedTachoFilteredOut() { var source = Source.From( Enumerable .Range(0, 100) .Select(x => (x % 2 == 0) ? x : x - 1) .Select(x => (uint)x) .Select(x => new TimedObject { TachometerCount = x * 50 }) ); var decimator = new SpatialDecimator <TimedObject>(100, 0); var probe = CreateTestProbe(); source.Via(decimator).RunWith(Sink.ActorRef <TimedObject>(probe, new object()), Materializer); var actual = probe.ReceiveN(50, Debugger.IsAttached ? TimeSpan.FromSeconds(300) : TimeSpan.FromSeconds(3)); actual.Should().AllBeAssignableTo <TimedObject>(); var msgs = actual.Cast <TimedObject>(); msgs.Should().BeInAscendingOrder(x => x.TachometerCount); msgs.Select(x => x.TachometerCount).Should().BeEquivalentTo(Enumerable.Range(0, 50).Select(x => x * 100)); }
static void Main(string[] args) { Log.Logger = LoggerFactory.Logger; var logSwitch = LoggerFactory.LoggingSwitch; var config = ConfigurationFactory.ParseString(File.ReadAllText("config.hocon")); logSwitch.MinimumLevel = LogEventLevel.Debug; using (var system = ActorSystem.Create("System", config)) using (var materialiser = system.Materializer()) { Log.Information("System Started"); // Create actors. var loggingActor = system.ActorOf <LoggingActor>("Logger"); // Create streams. var generator = Source.From <ISyncData>(GenerateData()); var decimator = new SpatialDecimator <ISyncData>(300, 1); var flow = Flow.Create <ISyncData>().Via(decimator); var sink = Sink.ActorRef <ISyncData>(loggingActor, PoisonPill.Instance); var queue = generator.Via(flow).RunWith(sink, materialiser); // Close system logic. Console.CancelKeyPress += (obj, a) => { system.Terminate().Wait(TimeSpan.FromSeconds(3)); }; system.WhenTerminated.Wait(); Log.Information("System Stopped"); Log.CloseAndFlush(); } }