static async Task CheckSameAsync(IChaserNode expected, IChaserNode actual) { Assert.AreEqual(expected.Caption, actual.Caption); Assert.AreEqual(expected.Probability, actual.Probability); var expectedEnumerator = (await expected.GetChildrenAsync(0)).GetEnumerator(); var actualEnumerator = (await actual.GetChildrenAsync(0)).GetEnumerator(); var maxProbability = 1.0; var probabilitySum = 0.0; var isLeaf = true; while (expectedEnumerator.MoveNext()) { isLeaf = false; Assert.IsTrue(actualEnumerator.MoveNext()); var expectedChild = expectedEnumerator.Current; var actualChild = actualEnumerator.Current; await CheckSameAsync(expectedChild, actualChild); Assert.IsTrue(expectedChild.Probability <= maxProbability); maxProbability = expectedChild.Probability; probabilitySum += expectedChild.Probability; } Assert.IsTrue(isLeaf || !actualEnumerator.MoveNext()); Assert.IsTrue(0 <= maxProbability); Assert.IsTrue(probabilitySum <= 1.0); }
public async Task <IEnumerable <IChaserNode> > GetChildrenAsync(double precision) { if (_sortedSet == null) { _sortedSet = new SortedSet <AlphabeticChaserNode>(); var probabilitySum = 0.0; var maxProbability = 1.0; var enumerable = await _wrapped.GetChildrenAsync(precision); var enumerator = enumerable.GetEnumerator(); while (_probabilityLimit <= maxProbability && enumerator.MoveNext()) { var current = enumerator.Current; _sortedSet.Add(new AlphabeticChaserNode(current, _probabilityLimit)); maxProbability = current.Probability; probabilitySum += current.Probability; } } return(_sortedSet); }