public void CompareEqualValues() { var expected = NodeEqualityEnum.Equal; var actual = NodeComparer <int> .Compare(1, 1); Assert.Equal(expected, actual); }
public void CompareGreaterThan() { var expected = NodeEqualityEnum.GreaterThan; var actual = NodeComparer <int> .Compare(100, 20); Assert.Equal(expected, actual); }
protected override AlgorithmState <TFactor, TStep> Search(Node <TFactor, TStep> current, Node <TFactor, TStep> bound, ISet <TStep> visited) { /* * Important Note: * Only the status AlgorithmFlag.InProgress should be reported from this method * because either AlgorithmFlag.Found or AlgorithmFlag.NotFound should only occur once. */ visited.Add(current.Step); if (Source.StepComparer.Equals(current.Step, Source.To)) { return(new AlgorithmState <TFactor, TStep>(AlgorithmFlag.Found, current)); } var nexts = Source.Expands(current.Step, current.Level, step => !visited.Contains(step)).ToArray(); if (nexts.Length == 0) { return(new AlgorithmState <TFactor, TStep>(AlgorithmFlag.NotFound, current)); } Array.ForEach(nexts, next => next.Previous = current); Array.Sort(nexts, NodeComparer); var sortAt = 0; var state = default(AlgorithmState <TFactor, TStep>); while (nexts.Length - sortAt > 0) { var best = _observer.InProgress(nexts[sortAt], new ArraySegment <Node <TFactor, TStep> >(nexts, sortAt, nexts.Length - sortAt)); // nexts.First(); Debug.WriteLine($"{current.Step}\t{current.Level} -> {best.Step}\t{best.Level}"); if (NodeComparer.Compare(best, bound) > 0) { return(new AlgorithmState <TFactor, TStep>(AlgorithmFlag.NotFound, best)); } if (nexts.Length - sortAt < 2) { state = Search(best, null, visited); } else { state = Search(best, NodeComparer.Min(nexts[sortAt + 1], bound), visited); } switch (state.Flag) { case AlgorithmFlag.Found: return(state); case AlgorithmFlag.NotFound: sortAt++; // nexts.RemoveAt(0); break; } } return(AlgorithmState <TFactor, TStep> .NotFound); }
public void Compare() { var node1 = new Node { PredictedTotalCost = 1 }; var node2 = new Node { PredictedTotalCost = 2 }; var comparer = new NodeComparer(); Assert.That(comparer.Compare(node1, node2), Is.Negative); }