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 }
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 }
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)); }
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; } }