public void TimelineStream_Receiver_PushSegmentation() { var receiveSpan = TimeSpan.FromMinutes(15); var segmentSpan = TimeSpan.FromMinutes(30); var now = DateTime.UtcNow - receiveSpan; var segments = new TimelineStream(receiveSpan, segmentSpan); var target = new[] { new Fragment { Arg1 = now.RoundLower(1), Include1 = true, Arg2 = now.RoundLower(1) + segmentSpan, Include2 = false, Entries = ToReference(Enumerable.Range(0, 30).Select(x => now + TimeSpan.FromMinutes(x)).ToArray()) }, new Fragment { Arg1 = now.RoundLower(1) + segmentSpan, Include1 = true, Arg2 = now.RoundLower(1) + segmentSpan * 2, Include2 = false, Entries = ToReference(Enumerable.Range(30, 30).Select(x => now + TimeSpan.FromMinutes(x)).ToArray()) }, new Fragment { Arg1 = now.RoundLower(1) + segmentSpan * 2, Include1 = true, Arg2 = now.RoundLower(1) + segmentSpan * 2 + receiveSpan, Include2 = false, Entries = ToReference(Enumerable.Range(60, 15).Select(x => now + TimeSpan.FromMinutes(x)).ToArray()) }, new Fragment { Arg1 = now.RoundLower(1) + segmentSpan * 2 + receiveSpan, Include1 = true, Arg2 = null, Include2 = true, Entries = ToReference(Enumerable.Range(75, 15).Select(x => now + TimeSpan.FromMinutes(x)).ToArray()) } }; segments.Push(ToReference(Enumerable.Range(0, 90).Select(x => now + TimeSpan.FromMinutes(x)).ToArray())); AssertFragments(target, segments.GetItems()); }