示例#1
0
        public void ProductWithLogOverrideNarrow()
        {
            for (var i = 0; i < 2; i++)
            {
                var dist1 = DiscreteChar.LetterOrDigit();
                var dist2 = DiscreteChar.OneOf('1', '3', '5', '6');

                var logOverrideProbability = Math.Log(0.9);
                dist1.SetToPartialUniformOf(dist1, logOverrideProbability);
                Xunit.Assert.True(dist1.HasLogProbabilityOverride);
                Xunit.Assert.False(dist2.IsBroad);

                if (i == 1)
                {
                    Util.Swap(ref dist1, ref dist2);
                }

                var dist3 = DiscreteChar.Uniform();
                dist3.SetToProduct(dist1, dist2);

                Xunit.Assert.False(dist3.HasLogProbabilityOverride);
                Assert.Equal(Math.Log(0.25), dist3.GetLogProb('5'), Eps);
                Xunit.Assert.True(double.IsNegativeInfinity(dist3.GetLogProb('a')));
            }
        }
示例#2
0
        public void PartialUniformWithLogProbabilityOverride()
        {
            var dist       = DiscreteChar.LetterOrDigit();
            var probLetter = Math.Exp(dist.GetLogProb('j'));
            var probNumber = Math.Exp(dist.GetLogProb('5'));

            var logProbabilityOverride = Math.Log(0.7);
            var scaledDist             = DiscreteChar.Uniform();

            scaledDist.SetToPartialUniformOf(dist, logProbabilityOverride);
            var scaledLogProbLetter = scaledDist.GetLogProb('j');
            var scaledLogProbNumber = scaledDist.GetLogProb('5');

            Assert.Equal(scaledLogProbLetter, logProbabilityOverride, Eps);
            Assert.Equal(scaledLogProbNumber, logProbabilityOverride, Eps);

            // Check that cache has not been compromised.
            Assert.Equal(probLetter, Math.Exp(dist.GetLogProb('j')), Eps);
            Assert.Equal(probNumber, Math.Exp(dist.GetLogProb('5')), Eps);

            // Check that an exception is thrown if a bad maximumProbability is passed down.
            Xunit.Assert.Throws <ArgumentException>(() =>
            {
                var badDist = DiscreteChar.Uniform();
                badDist.SetToPartialUniformOf(dist, Math.Log(1.2));
            });
        }
示例#3
0
        public void HasLogOverride()
        {
            var dist1 = DiscreteChar.LetterOrDigit();

            Xunit.Assert.False(dist1.HasLogProbabilityOverride);

            dist1.SetToPartialUniformOf(dist1, Math.Log(0.9));
            Xunit.Assert.True(dist1.HasLogProbabilityOverride);
        }
示例#4
0
 public void CommonChars()
 {
     TestSupport("digit", DiscreteChar.Digit(), "0123456789", "Ab !Ј");
     TestSupport("lower", DiscreteChar.Lower(), "abcdefghixyz", "ABC0123, ");
     TestSupport("upper", DiscreteChar.Upper(), "ABCDEFGHUXYZ", "abc0123, ");
     TestSupport("letter", DiscreteChar.Letter(), "aBcDeFgGhxyzXYZ", "0123! ,");
     TestSupport("letterOrDigit", DiscreteChar.LetterOrDigit(), "abcABC0123xyzXYZ789", " !Ј$,");
     TestSupport("wordChar", DiscreteChar.WordChar(), "abc_ABC_0123s", " !:.,");
     TestSupport("whitespace", DiscreteChar.Whitespace(), " \t", "abcABC0123,:!");
 }
示例#5
0
        public void Sum()
        {
            StringTransducer replace = StringTransducer.Sum(
                StringTransducer.Replace(DiscreteChar.Lower(), DiscreteChar.Digit()),
                StringTransducer.Replace(DiscreteChar.Lower(), DiscreteChar.LetterOrDigit()));

            StringInferenceTestUtilities.TestTransducerValue(replace, "hello", "123", 2.0);
            StringInferenceTestUtilities.TestTransducerValue(replace, "w", "1337", 2.0);
            StringInferenceTestUtilities.TestTransducerValue(replace, "w", string.Empty, 2.0);
            StringInferenceTestUtilities.TestTransducerValue(replace, string.Empty, "17", 2.0);
            StringInferenceTestUtilities.TestTransducerValue(replace, string.Empty, string.Empty, 2.0);
            StringInferenceTestUtilities.TestTransducerValue(replace, "hello", "worlds", 1.0);
            StringInferenceTestUtilities.TestTransducerValue(replace, "hello", "WORLDS111", 1.0);
            StringInferenceTestUtilities.TestTransducerValue(replace, "123", "worlds", 0.0);
            StringInferenceTestUtilities.TestTransducerValue(replace, "123", "123", 0.0);
            StringInferenceTestUtilities.TestTransducerValue(replace, "1", string.Empty, 0.0);
        }
示例#6
0
        public void ReplaceAutomaton()
        {
            StringAutomaton automaton1 = StringAutomaton.Constant(2.0, DiscreteChar.Lower());

            automaton1 = automaton1.Sum(StringAutomaton.ConstantOnElement(3.0, 'a'));
            StringAutomaton automaton2 = StringAutomaton.Constant(0.5, DiscreteChar.Digit());

            automaton2 = automaton2.Sum(StringAutomaton.Constant(2.5, DiscreteChar.LetterOrDigit()));
            StringTransducer replace = StringTransducer.Replace(automaton1, automaton2);

            StringInferenceTestUtilities.TestTransducerValue(replace, string.Empty, "123", 6.0);
            StringInferenceTestUtilities.TestTransducerValue(replace, "a", "123", 15.0);
            StringInferenceTestUtilities.TestTransducerValue(replace, "ax", "AbC", 5.0);
            StringInferenceTestUtilities.TestTransducerValue(replace, "a", "a", 12.5);
            StringInferenceTestUtilities.TestTransducerValue(replace, string.Empty, string.Empty, 6.0);
            StringInferenceTestUtilities.TestTransducerValue(replace, "123", string.Empty, 0.0);
            StringInferenceTestUtilities.TestTransducerValue(replace, "AbC", "ax", 0.0);
            StringInferenceTestUtilities.TestTransducerValue(replace, "1", "1", 0.0);
        }