public void MaximumIsGreaterThanAnyDateTime() { var t1 = new MessageTimestamp(new DateTime(3423, DateTimeKind.Local)); Assert.IsTrue(MessageTimestamp.Compare(t1, MessageTimestamp.MaxValue) < 0); Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MaxValue, t1) > 0); var t2 = new MessageTimestamp(new DateTime(3423, DateTimeKind.Utc)); Assert.IsTrue(MessageTimestamp.Compare(t2, MessageTimestamp.MaxValue) < 0); Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MaxValue, t2) > 0); var t3 = new MessageTimestamp(new DateTime(3423, DateTimeKind.Unspecified)); Assert.IsTrue(MessageTimestamp.Compare(t3, MessageTimestamp.MaxValue) < 0); Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MaxValue, t3) > 0); var t4 = new MessageTimestamp(new DateTime(1, DateTimeKind.Local)); Assert.IsTrue(MessageTimestamp.Compare(t4, MessageTimestamp.MaxValue) < 0); Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MaxValue, t4) > 0); var t5 = new MessageTimestamp(new DateTime(1, DateTimeKind.Utc)); Assert.IsTrue(MessageTimestamp.Compare(t5, MessageTimestamp.MaxValue) < 0); Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MaxValue, t5) > 0); }
public void MinimumIsLessThanAnyDateTime() { Func <long, long> localTicksToUtcTicks = ticks => new DateTime(ticks, DateTimeKind.Local).ToUniversalTime().Ticks; var t1 = new MessageTimestamp(new DateTime(3423, DateTimeKind.Local)); Assert.IsTrue(MessageTimestamp.Compare(t1, MessageTimestamp.MinValue) > 0); Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MinValue, t1) < 0); var t2 = new MessageTimestamp(new DateTime(localTicksToUtcTicks(3423), DateTimeKind.Utc)); Assert.IsTrue(MessageTimestamp.Compare(t2, MessageTimestamp.MinValue) > 0); Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MinValue, t2) < 0); var t3 = new MessageTimestamp(new DateTime(3423, DateTimeKind.Unspecified)); Assert.IsTrue(MessageTimestamp.Compare(t3, MessageTimestamp.MinValue) > 0); Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MinValue, t3) < 0); var t4 = new MessageTimestamp(new DateTime(1, DateTimeKind.Local)); Assert.IsTrue(MessageTimestamp.Compare(t4, MessageTimestamp.MinValue) > 0); Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MinValue, t4) < 0); var t5 = new MessageTimestamp(new DateTime(localTicksToUtcTicks(1), DateTimeKind.Utc)); Assert.IsTrue(MessageTimestamp.Compare(t5, MessageTimestamp.MinValue) > 0); Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MinValue, t5) < 0); }
public int CompareTo(TextLogEventTrigger t) { int x; if ((x = Math.Sign(this.StreamPosition - t.StreamPosition)) != 0) { return(x); } if ((x = MessageTimestamp.Compare(this.Timestamp, t.Timestamp)) != 0) { return(x); } return(0); }
public static int Compare(StateInspectorEvent evt1, MessageTimestamp evt2time, ILogSource evt2source, long evt2Position) { int sign = MessageTimestamp.Compare(evt1.Trigger.Timestamp.Adjust(evt1.Output.LogSource.TimeOffsets), evt2time); if (sign != 0) { return(sign); } sign = MessagesComparer.CompareLogSourceConnectionIds( evt1.Output.LogSource.GetSafeConnectionId(), evt2source.GetSafeConnectionId()); if (sign != 0) { return(sign); } sign = Math.Sign(evt1.Trigger.StreamPosition - evt2Position); return(sign); }
public void LoselessFormatTest() { var d1 = new MessageTimestamp(new DateTime(2010, 10, 22, 3, 3, 4, DateTimeKind.Local)); var d2 = new MessageTimestamp(new DateTime(2010, 10, 22, 3, 3, 4, DateTimeKind.Utc)); var d3 = new MessageTimestamp(new DateTime(2010, 10, 22, 3, 3, 4, DateTimeKind.Unspecified)); var d1_str = d1.StoreToLoselessFormat(); var d2_str = d2.StoreToLoselessFormat(); var d3_str = d3.StoreToLoselessFormat(); var d1_restored = MessageTimestamp.ParseFromLoselessFormat(d1_str); var d2_restored = MessageTimestamp.ParseFromLoselessFormat(d2_str); var d3_restored = MessageTimestamp.ParseFromLoselessFormat(d3_str); Assert.AreEqual(0, MessageTimestamp.Compare(d1, d1_restored)); Assert.AreEqual(0, MessageTimestamp.Compare(d2, d2_restored)); Assert.AreEqual(0, MessageTimestamp.Compare(d2, d2_restored)); }
public int CompareThreads(IThread t1, IThread t2) { if (t1.IsDisposed || t2.IsDisposed) { return(0); } int ret = 0; switch (sortColumn) { case 0: ret = string.Compare(t2.ID, t1.ID); break; case 1: ret = MessageTimestamp.Compare(GetBookmarkDate(t2.FirstKnownMessage), GetBookmarkDate(t1.FirstKnownMessage)); break; case 2: ret = MessageTimestamp.Compare(GetBookmarkDate(t2.LastKnownMessage), GetBookmarkDate(t1.LastKnownMessage)); break; } return(ascending ? ret : -ret); }
static VisualizerNode MakeRootNode( IReadOnlyList <IStateInspectorOutputsGroup> groups, EventHandler <NodeCreatedEventArgs> nodeCreationHandler, ImmutableDictionary <ILogSource, string> annotationsMap, VisualizerNode existingRoot ) { var existingRoots = existingRoot.Children.ToLookup(c => c.InspectedObject); var children = ImmutableList.CreateRange( groups.SelectMany( group => group.Roots.Select(rootObj => { var existingNode = existingRoots[rootObj].FirstOrDefault(); if (existingNode != null) { return(existingNode.SetAnnotationsMap(annotationsMap)); } var newNode = MakeVisualizerNode(rootObj, 1, annotationsMap); newNode.SetInitialProps(nodeCreationHandler); // call handler on second phase when all children and parents are initiated return(newNode); }) ) ); children = children.Sort((n1, n2) => MessageTimestamp.Compare(GetNodeTimestamp(n1), GetNodeTimestamp(n2))); var result = new VisualizerNode(null, children, true, false, 0, annotationsMap); if (!result.HasSelectedNodes && result.Children.Count > 0) { result = result.Children[0].Select(true); } return(result); }
void EnsureTreeView() { if (!treeViewInvalidated) { return; } treeViewInvalidated = false; var oldRoots = view.EnumCollection(view.RootNodesCollection).ToList(); var newRoots = new List <NodeInfo>(); bool updateStarted = false; MarkAllViewPartsAsDead(); foreach (var group in model.Groups) { TreeViewPart part; if (!viewPartsCache.TryGetValue(group.Key, out part)) { viewPartsCache.Add(group.Key, part = new TreeViewPart() { Key = group.Key }); foreach (var rootObj in group.Roots) { if (!updateStarted) { view.BeginTreeUpdate(); updateStarted = true; } var nodesToCollapse = new List <NodeInfo>(); var rootNode = CreateViewNode(view, new NodesCollectionInfo(), rootObj, 0, nodesToCollapse); part.RootNodes.Add(rootNode); view.ExpandAll(rootNode); nodesToCollapse.ForEach(view.Collapse); } } newRoots.AddRange(part.RootNodes); part.OutputIsAlive = true; } RemoveDeadViewPartsFromCache(); newRoots.Sort((n1, n2) => MessageTimestamp.Compare(GetNodeTimestamp(n1), GetNodeTimestamp(n2))); bool propsNeedUpdating = false; if (!newRoots.SequenceEqual(oldRoots)) { if (!updateStarted) { view.BeginTreeUpdate(); } var oldSelectedNodes = view.SelectedNodes; var newSelectedNodes = ( from selectedNode in oldSelectedNodes let selectedObj = GetInspectedObject(selectedNode) where selectedObj != null let selectedObjRoot = selectedObj.GetRoot() where newRoots.Any(r => r.Tag == selectedObjRoot) select selectedNode ).ToArray(); view.Clear(view.RootNodesCollection); foreach (var rootNode in newRoots) { view.AddNode(view.RootNodesCollection, rootNode); } if (newSelectedNodes.Length > 0) { view.SelectedNodes = newSelectedNodes; selectedObjectsPathsBeforeSelectionLoss.Clear(); } else if (oldSelectedNodes.Length > 0) { selectedObjectsPathsBeforeSelectionLoss.Clear(); selectedObjectsPathsBeforeSelectionLoss.AddRange( from selectedNode in oldSelectedNodes let selectedObj = GetInspectedObject(selectedNode) where selectedObj != null select new InspectedObjectPath(selectedObj) ); } else if (selectedObjectsPathsBeforeSelectionLoss.Count > 0) { newSelectedNodes = ( from p in selectedObjectsPathsBeforeSelectionLoss let n = p.Follow(this) where n != null select n.Value ).ToArray(); if (newSelectedNodes.Length > 0) { view.SelectedNodes = newSelectedNodes; view.ScrollSelectedNodesInView(); selectedObjectsPathsBeforeSelectionLoss.Clear(); } } view.EndTreeUpdate(); } newRoots.ForEach(UpdateRootNodeText); if (propsNeedUpdating) { UpdateSelectedObjectPropertiesAndHistory(); } }