예제 #1
0
        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);
        }
예제 #2
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);
        }