Пример #1
0
        public void EnumerateSupportThrowsOnLoops()

        {
            Assert.Throws <NotSupportedException>(() =>
            {
                StringDistribution.OneOf(StringDistribution.String("zzz"), StringDistribution.Repeat('z')).EnumerateSupport().ToArray();
            });
        }
        public void NonNormalizableLoop3()
        {
            StringAutomaton automaton = StringAutomaton.Zero();

            automaton.Start.AddTransition('a', Weight.FromValue(2.0), automaton.Start);
            automaton.Start.EndWeight = Weight.FromValue(5.0);

            StringAutomaton copyOfAutomaton = automaton.Clone();

            Assert.Throws <InvalidOperationException>(() => automaton.NormalizeValues());
            Assert.False(copyOfAutomaton.TryNormalizeValues());
            ////Assert.Equal(f, copyOfF); // TODO: fix equality first
        }
        public void NonNormalizableLoop2()
        {
            StringAutomaton automaton = StringAutomaton.Zero();

            var endState = automaton.Start.AddTransition('a', Weight.FromValue(2.0));

            endState.EndWeight = Weight.FromValue(5.0);
            endState.AddTransition('b', Weight.FromValue(0.1), automaton.Start);
            endState.AddTransition('c', Weight.FromValue(0.05), automaton.Start);
            endState.AddSelfTransition('!', Weight.FromValue(0.75));

            StringAutomaton copyOfAutomaton = automaton.Clone();

            Assert.Throws <InvalidOperationException>(() => copyOfAutomaton.NormalizeValues());
            Assert.False(copyOfAutomaton.TryNormalizeValues());
            ////Assert.Equal(f, copyOfF); // TODO: fix equality first
        }
Пример #4
0
        public void NonNormalizableLoop4()
        {
            StringAutomaton automaton = StringAutomaton.Zero();

            automaton.Start.AddSelfTransition('a', Weight.FromValue(0.1));
            var branch1 = automaton.Start.AddTransition('a', Weight.FromValue(2.0));

            branch1.AddSelfTransition('a', Weight.FromValue(2.0));
            branch1.SetEndWeight(Weight.One);
            var branch2 = automaton.Start.AddTransition('a', Weight.FromValue(2.0));

            branch2.SetEndWeight(Weight.One);

            StringAutomaton copyOfAutomaton = automaton.Clone();

            Assert.Throws <InvalidOperationException>(() => automaton.NormalizeValues());
            Assert.False(copyOfAutomaton.TryNormalizeValues());
            ////Assert.Equal(f, copyOfF); // TODO: fix equality first
        }
Пример #5
0
        public void MessageOperatorsTest()
        {
            int lowercaseCharacterCount = DiscreteChar.Lower().GetProbs().Count(p => p > 0);
            int uppercaseCharacterCount = DiscreteChar.Upper().GetProbs().Count(p => p > 0);

            StringDistribution strDist1  = StringDistribution.OneOf("a", "b", "abc", "ab", "bcd", "d", string.Empty);
            DiscreteChar       charDist1 = SingleOp.CharacterAverageConditional(strDist1);

            Assert.Equal(1.0 / 3.0, charDist1['a'], ProbEps);
            Assert.Equal(1.0 / 3.0, charDist1['b'], ProbEps);
            Assert.Equal(1.0 / 3.0, charDist1['d'], ProbEps);

            StringDistribution strDist2  = StringDistribution.OneOf(strDist1, StringDistribution.OneOf("b", "d"));
            DiscreteChar       charDist2 = SingleOp.CharacterAverageConditional(strDist2);

            Assert.Equal(1.0 / 10.0, charDist2['a'], ProbEps);
            Assert.Equal(4.5 / 10.0, charDist2['b'], ProbEps);
            Assert.Equal(4.5 / 10.0, charDist2['d'], ProbEps);

            StringDistribution strDist3  = StringDistribution.Letters(minLength: 0);
            DiscreteChar       charDist3 = SingleOp.CharacterAverageConditional(strDist3);

            Assert.Equal(1.0 / (lowercaseCharacterCount + uppercaseCharacterCount), charDist3['a'], ProbEps);
            Assert.Equal(1.0 / (lowercaseCharacterCount + uppercaseCharacterCount), charDist3['B'], ProbEps);
            Assert.Equal(1.0 / (lowercaseCharacterCount + uppercaseCharacterCount), charDist3['d'], ProbEps);

            StringDistribution strDist4  = StringDistribution.OneOf(strDist3, StringDistribution.Lower(minLength: 0));
            DiscreteChar       charDist4 = SingleOp.CharacterAverageConditional(strDist4);

            Assert.Equal(2.0 / (2 * lowercaseCharacterCount + uppercaseCharacterCount), charDist4['a'], ProbEps);
            Assert.Equal(1.0 / (2 * lowercaseCharacterCount + uppercaseCharacterCount), charDist4['B'], ProbEps);
            Assert.Equal(2.0 / (2 * lowercaseCharacterCount + uppercaseCharacterCount), charDist4['d'], ProbEps);

            StringDistribution strDist5 = StringDistribution.String("XX").Append(strDist4);

            Assert.Throws <AllZeroException>(() => SingleOp.CharacterAverageConditional(strDist5));
        }
Пример #6
0
        public void LargeTransducer()
        {
            StringAutomaton.MaxStateCount = 1200000; // Something big
            StringAutomaton bigAutomaton = StringAutomaton.Zero();

            bigAutomaton.AddStates(StringAutomaton.MaxStateCount - bigAutomaton.States.Count);
            Func <DiscreteChar, Weight, Tuple <Option <PairDistribution <char, DiscreteChar> >, Weight> > transitionConverter =
                (dist, weight) => Tuple.Create(Option.Some(PairDistribution <char, DiscreteChar> .FromFirstSecond(dist, dist)), weight);

            Assert.Throws <AutomatonTooLargeException>(() => StringTransducer.FromAutomaton(bigAutomaton, transitionConverter));

            // Shouldn't throw if the maximum number of states is increased
            int prevMaxStateCount = StringTransducer.MaxStateCount;

            try
            {
                StringTransducer.MaxStateCount = StringAutomaton.MaxStateCount;
                StringTransducer.FromAutomaton(bigAutomaton, transitionConverter);
            }
            finally
            {
                StringTransducer.MaxStateCount = prevMaxStateCount;
            }
        }