public void SumSessionWindow() { var input = new PartitionedStreamEvent <int, double>[] { PartitionedStreamEvent.CreatePoint(0, 0, 1.0), PartitionedStreamEvent.CreatePoint(0, 1, 2.0), PartitionedStreamEvent.CreatePoint(0, 2, 3.0), PartitionedStreamEvent.CreatePoint(0, 5, 4.0), PartitionedStreamEvent.CreatePoint(0, 6, 5.0), PartitionedStreamEvent.CreatePoint(0, 9, 6.0), }; var expected = new PartitionedStreamEvent <int, double>[] { PartitionedStreamEvent.CreateStart(0, 0, 1.0), PartitionedStreamEvent.CreateEnd(0, 1, 0, 1.0), PartitionedStreamEvent.CreateStart(0, 1, 3.0), PartitionedStreamEvent.CreateEnd(0, 2, 1, 3.0), PartitionedStreamEvent.CreateStart(0, 2, 6.0), PartitionedStreamEvent.CreateEnd(0, 4, 2, 6.0), PartitionedStreamEvent.CreateStart(0, 5, 4.0), PartitionedStreamEvent.CreateEnd(0, 6, 5, 4.0), PartitionedStreamEvent.CreateStart(0, 6, 9.0), PartitionedStreamEvent.CreateEnd(0, 8, 6, 9.0), PartitionedStreamEvent.CreateStart(0, 9, 6.0), PartitionedStreamEvent.CreateEnd(0, 11, 9, 6.0), PartitionedStreamEvent.CreateLowWatermark <int, double>(StreamEvent.InfinitySyncTime), }; var output = SessionWindowSum(input, 2, 5).ToArray(); Assert.IsTrue(expected.SequenceEqual(output)); }
public void PassThroughOutOfOrderWithPunctuation2() { var input = new PartitionedStreamEvent <int, int>[] { PartitionedStreamEvent.CreateStart(3, 3, 3), PartitionedStreamEvent.CreatePunctuation <int, int>(3, 10), PartitionedStreamEvent.CreateStart(2, 2, 2), PartitionedStreamEvent.CreatePunctuation <int, int>(2, 10), PartitionedStreamEvent.CreateStart(1, 1, 1), PartitionedStreamEvent.CreatePunctuation <int, int>(1, 10), PartitionedStreamEvent.CreateStart(0, 0, 0), PartitionedStreamEvent.CreatePunctuation <int, int>(0, 10), }; var expected = new PartitionedStreamEvent <int, int>[] { PartitionedStreamEvent.CreateStart(3, 3, 3), PartitionedStreamEvent.CreatePunctuation <int, int>(3, 10), PartitionedStreamEvent.CreateStart(2, 2, 2), PartitionedStreamEvent.CreatePunctuation <int, int>(2, 10), PartitionedStreamEvent.CreateStart(1, 1, 1), PartitionedStreamEvent.CreatePunctuation <int, int>(1, 10), PartitionedStreamEvent.CreateStart(0, 0, 0), PartitionedStreamEvent.CreatePunctuation <int, int>(0, 10), PartitionedStreamEvent.CreateLowWatermark <int, int>(StreamEvent.InfinitySyncTime), }; var output = Passthrough(input).ToList(); Assert.IsTrue(expected.SequenceEqual(output)); }
public void DisjointUnionNegativeWatermarkRepro() { const int leftKey = 1; const int rightKey = 2; var left = new Subject <PartitionedStreamEvent <int, int> >(); var right = new Subject <PartitionedStreamEvent <int, int> >(); var qc = new QueryContainer(); var leftInput = qc.RegisterInput(left); var rightInput = qc.RegisterInput(right); var actualOutput = new List <PartitionedStreamEvent <int, int> >(); var inputs = new IStreamable <PartitionKey <int>, int>[] { leftInput, rightInput }; var union = new MultiUnionStreamable <PartitionKey <int>, int>(inputs, guaranteedDisjoint: true); var egress = qc.RegisterOutput(union).ForEachAsync(o => actualOutput.Add(o)); var process = qc.Restore(); left.OnNext(PartitionedStreamEvent.CreatePoint(leftKey, 100, 1)); right.OnNext(PartitionedStreamEvent.CreatePoint(rightKey, 100, 1)); process.Flush(); left.OnCompleted(); right.OnCompleted(); var expected = new PartitionedStreamEvent <int, int>[] { PartitionedStreamEvent.CreatePoint(leftKey, 100, 1), PartitionedStreamEvent.CreatePoint(rightKey, 100, 1), PartitionedStreamEvent.CreateLowWatermark <int, int>(StreamEvent.InfinitySyncTime), }; Assert.IsTrue(expected.SequenceEqual(actualOutput)); }
public void AverageSessionWindow() { var input = new PartitionedStreamEvent <int, double>[] { PartitionedStreamEvent.CreateStart(0, 0, 0.0), PartitionedStreamEvent.CreateStart(0, 1, 1.0), PartitionedStreamEvent.CreateStart(0, 2, 2.0), PartitionedStreamEvent.CreateStart(0, 8, 4.0), PartitionedStreamEvent.CreateStart(0, 9, 7.0), PartitionedStreamEvent.CreateStart(1, 1, 1.0), PartitionedStreamEvent.CreateStart(1, 2, 2.0), PartitionedStreamEvent.CreateStart(1, 3, 3.0), PartitionedStreamEvent.CreateStart(2, 8, 2.0), PartitionedStreamEvent.CreateStart(2, 20, 3.0), PartitionedStreamEvent.CreateStart(2, 22, 4.0), PartitionedStreamEvent.CreateStart(3, 3, 3.0), PartitionedStreamEvent.CreateStart(3, 4, 4.0), PartitionedStreamEvent.CreateStart(3, 5, 5.0), }; var expected = new PartitionedStreamEvent <int, double>[] { PartitionedStreamEvent.CreateStart(0, 0, 0.0), PartitionedStreamEvent.CreateEnd(0, 1, 0, 0.0), PartitionedStreamEvent.CreateStart(0, 1, 0.5), PartitionedStreamEvent.CreateEnd(0, 2, 1, 0.5), PartitionedStreamEvent.CreateStart(0, 2, 1.0), PartitionedStreamEvent.CreateEnd(0, 7, 2, 1.0), PartitionedStreamEvent.CreateStart(0, 8, 4.0), PartitionedStreamEvent.CreateEnd(0, 9, 8, 4.0), PartitionedStreamEvent.CreateStart(1, 1, 1.0), PartitionedStreamEvent.CreateEnd(1, 2, 1, 1.0), PartitionedStreamEvent.CreateStart(1, 2, 1.5), PartitionedStreamEvent.CreateEnd(1, 3, 2, 1.5), PartitionedStreamEvent.CreateStart(2, 8, 2.0), PartitionedStreamEvent.CreateEnd(2, 13, 8, 2.0), PartitionedStreamEvent.CreateStart(2, 20, 3.0), PartitionedStreamEvent.CreateEnd(2, 22, 20, 3.0), PartitionedStreamEvent.CreateStart(3, 3, 3.0), PartitionedStreamEvent.CreateEnd(3, 4, 3, 3.0), PartitionedStreamEvent.CreateStart(3, 4, 3.5), PartitionedStreamEvent.CreateEnd(3, 5, 4, 3.5), PartitionedStreamEvent.CreateStart(0, 9, 5.5), PartitionedStreamEvent.CreateEnd(0, 14, 9, 5.5), PartitionedStreamEvent.CreateStart(1, 3, 2.0), PartitionedStreamEvent.CreateEnd(1, 8, 3, 2.0), PartitionedStreamEvent.CreateStart(2, 22, 3.5), PartitionedStreamEvent.CreateEnd(2, 27, 22, 3.5), PartitionedStreamEvent.CreateStart(3, 5, 4.0), PartitionedStreamEvent.CreateEnd(3, 10, 5, 4.0), PartitionedStreamEvent.CreateLowWatermark <int, double>(StreamEvent.InfinitySyncTime), }; var output = SessionWindowAverage(input, 5, 10); Assert.IsTrue(expected.SequenceEqual(output)); }
public void Union0() { var input1 = new PartitionedStreamEvent <int, double>[] { PartitionedStreamEvent.CreateStart(0, 0, 0.0), PartitionedStreamEvent.CreateStart(0, 1, 1.0), PartitionedStreamEvent.CreateStart(0, 2, 2.0), PartitionedStreamEvent.CreateStart(1, 1, 1.0), PartitionedStreamEvent.CreateStart(1, 2, 2.0), PartitionedStreamEvent.CreateStart(1, 3, 3.0), PartitionedStreamEvent.CreateStart(2, 2, 2.0), PartitionedStreamEvent.CreateStart(2, 3, 3.0), PartitionedStreamEvent.CreateStart(2, 4, 4.0), }; var input2 = new PartitionedStreamEvent <int, double>[] { PartitionedStreamEvent.CreateStart(2, 0, 0.0), PartitionedStreamEvent.CreateStart(2, 1, 1.0), PartitionedStreamEvent.CreateStart(2, 2, 2.0), PartitionedStreamEvent.CreateStart(1, 1, 1.0), PartitionedStreamEvent.CreateStart(1, 2, 2.0), PartitionedStreamEvent.CreateStart(1, 3, 3.0), PartitionedStreamEvent.CreateStart(0, 2, 2.0), PartitionedStreamEvent.CreateStart(0, 3, 3.0), PartitionedStreamEvent.CreateStart(0, 4, 4.0), }; var output = Union(input1, input2).ToArray(); var expected = new PartitionedStreamEvent <int, double>[] { PartitionedStreamEvent.CreateStart(0, 0, 0.0), PartitionedStreamEvent.CreateStart(2, 0, 0.0), PartitionedStreamEvent.CreateStart(2, 1, 1.0), PartitionedStreamEvent.CreateStart(2, 2, 2.0), PartitionedStreamEvent.CreateStart(2, 2, 2.0), PartitionedStreamEvent.CreateStart(2, 3, 3.0), PartitionedStreamEvent.CreateStart(2, 4, 4.0), PartitionedStreamEvent.CreateStart(1, 1, 1.0), PartitionedStreamEvent.CreateStart(1, 1, 1.0), PartitionedStreamEvent.CreateStart(1, 2, 2.0), PartitionedStreamEvent.CreateStart(1, 2, 2.0), PartitionedStreamEvent.CreateStart(1, 3, 3.0), PartitionedStreamEvent.CreateStart(1, 3, 3.0), PartitionedStreamEvent.CreateStart(0, 1, 1.0), PartitionedStreamEvent.CreateStart(0, 2, 2.0), PartitionedStreamEvent.CreateStart(0, 2, 2.0), PartitionedStreamEvent.CreateStart(0, 3, 3.0), PartitionedStreamEvent.CreateStart(0, 4, 4.0), PartitionedStreamEvent.CreateLowWatermark <int, double>(StreamEvent.InfinitySyncTime), }; Assert.IsTrue(expected.SequenceEqual(output)); }
public void PassThroughEmpty() { var input = Array.Empty <PartitionedStreamEvent <int, int> >(); var expected = new PartitionedStreamEvent <int, int>[] { PartitionedStreamEvent.CreateLowWatermark <int, int>(StreamEvent.InfinitySyncTime), }; var output = Passthrough(input).ToList(); Assert.IsTrue(expected.SequenceEqual(output)); }
public void AverageGeneral() { var input = new PartitionedStreamEvent <int, double>[] { PartitionedStreamEvent.CreateStart(0, 0, 0.0), PartitionedStreamEvent.CreateStart(0, 1, 1.0), PartitionedStreamEvent.CreateStart(0, 2, 2.0), PartitionedStreamEvent.CreateStart(1, 1, 1.0), PartitionedStreamEvent.CreateStart(1, 2, 2.0), PartitionedStreamEvent.CreateStart(1, 3, 3.0), PartitionedStreamEvent.CreateStart(2, 2, 2.0), PartitionedStreamEvent.CreateStart(2, 3, 3.0), PartitionedStreamEvent.CreateStart(2, 4, 4.0), PartitionedStreamEvent.CreateStart(3, 3, 3.0), PartitionedStreamEvent.CreateStart(3, 4, 4.0), PartitionedStreamEvent.CreateStart(3, 5, 5.0), }; var expected = new PartitionedStreamEvent <int, double>[] { PartitionedStreamEvent.CreateStart(0, 0, 0.0), PartitionedStreamEvent.CreateEnd(0, 1, 0, 0.0), PartitionedStreamEvent.CreateStart(0, 1, 0.5), PartitionedStreamEvent.CreateEnd(0, 2, 1, 0.5), PartitionedStreamEvent.CreateStart(1, 1, 1.0), PartitionedStreamEvent.CreateEnd(1, 2, 1, 1.0), PartitionedStreamEvent.CreateStart(1, 2, 1.5), PartitionedStreamEvent.CreateEnd(1, 3, 2, 1.5), PartitionedStreamEvent.CreateStart(2, 2, 2.0), PartitionedStreamEvent.CreateEnd(2, 3, 2, 2.0), PartitionedStreamEvent.CreateStart(2, 3, 2.5), PartitionedStreamEvent.CreateEnd(2, 4, 3, 2.5), PartitionedStreamEvent.CreateStart(3, 3, 3.0), PartitionedStreamEvent.CreateEnd(3, 4, 3, 3.0), PartitionedStreamEvent.CreateStart(3, 4, 3.5), PartitionedStreamEvent.CreateEnd(3, 5, 4, 3.5), PartitionedStreamEvent.CreateStart(0, 2, 1.0), PartitionedStreamEvent.CreateStart(1, 3, 2.0), PartitionedStreamEvent.CreateStart(2, 4, 3.0), PartitionedStreamEvent.CreateStart(3, 5, 4.0), PartitionedStreamEvent.CreateLowWatermark <int, double>(StreamEvent.InfinitySyncTime), }; var output = AverageGeneral(input).ToList(); Assert.IsTrue(expected.SequenceEqual(output)); }
public void AverageTumblingWindow() { var input = new PartitionedStreamEvent <int, double>[] { PartitionedStreamEvent.CreateStart(0, 0, 0.0), PartitionedStreamEvent.CreateStart(0, 1, 1.0), PartitionedStreamEvent.CreateStart(0, 2, 2.0), PartitionedStreamEvent.CreateStart(1, 1, 1.0), PartitionedStreamEvent.CreateStart(1, 2, 2.0), PartitionedStreamEvent.CreateStart(1, 3, 3.0), PartitionedStreamEvent.CreateStart(2, 2, 2.0), PartitionedStreamEvent.CreateStart(2, 3, 3.0), PartitionedStreamEvent.CreateStart(2, 4, 4.0), PartitionedStreamEvent.CreateStart(3, 3, 3.0), PartitionedStreamEvent.CreateStart(3, 4, 4.0), PartitionedStreamEvent.CreateStart(3, 5, 5.0), }; var expected = new PartitionedStreamEvent <int, double>[] { PartitionedStreamEvent.CreateInterval(0, 0, 1, 0.0), PartitionedStreamEvent.CreateInterval(0, 1, 2, 1.0), PartitionedStreamEvent.CreateInterval(1, 1, 2, 1.0), PartitionedStreamEvent.CreateInterval(1, 2, 3, 2.0), PartitionedStreamEvent.CreateInterval(2, 2, 3, 2.0), PartitionedStreamEvent.CreateInterval(2, 3, 4, 3.0), PartitionedStreamEvent.CreateInterval(3, 3, 4, 3.0), PartitionedStreamEvent.CreateInterval(3, 4, 5, 4.0), PartitionedStreamEvent.CreateInterval(0, 2, 3, 2.0), PartitionedStreamEvent.CreateInterval(1, 3, 4, 3.0), PartitionedStreamEvent.CreateInterval(2, 4, 5, 4.0), PartitionedStreamEvent.CreateInterval(3, 5, 6, 5.0), PartitionedStreamEvent.CreateLowWatermark <int, double>(StreamEvent.InfinitySyncTime), }; var output = TumblingWindow(input); Assert.IsTrue(expected.SequenceEqual(output)); }