예제 #1
0
        public void MessageOpsTest()
        {
            const double Eps = 1e-6;

            StringDistribution str1 = StringOfLengthOp.StrAverageConditional(DiscreteChar.Letter(), 10);

            Assert.Equal(StringDistribution.Repeat(DiscreteChar.Letter(), 10, 10), str1);

            StringDistribution str2 = StringOfLengthOp.StrAverageConditional(
                DiscreteChar.PointMass('a'), Discrete.UniformInRange(5, 2, 4));

            Assert.Equal(StringDistribution.OneOf("aa", "aaa", "aaaa"), str2);

            StringDistribution str3 = StringOfLengthOp.StrAverageConditional(
                DiscreteChar.OneOf('a', 'b'), new Discrete(0.1, 0.0, 0.6, 0.3));

            StringInferenceTestUtilities.TestProbability(str3, 0.1, string.Empty);
            StringInferenceTestUtilities.TestProbability(str3, 0.6 / 4, "aa", "ab", "ba", "bb");
            StringInferenceTestUtilities.TestProbability(str3, 0.3 / 8, "aaa", "bbb", "abb", "bab");

            Discrete length1 = StringOfLengthOp.LengthAverageConditional(
                StringDistribution.OneOf("aa", "bbb"), DiscreteChar.PointMass('a'), Discrete.Uniform(10));

            Assert.Equal(Discrete.PointMass(2, 10), length1);

            Discrete length2 = StringOfLengthOp.LengthAverageConditional(
                StringDistribution.OneOf("aab", "ab", "b", "bc"), DiscreteChar.OneOf('a', 'b'), Discrete.Uniform(10));

            Assert.Equal(4.0 / 7.0, length2[1], Eps);
            Assert.Equal(2.0 / 7.0, length2[2], Eps);
            Assert.Equal(1.0 / 7.0, length2[3], Eps);
        }
예제 #2
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,:!");
 }
예제 #3
0
        public void ItemFromString()
        {
            Variable <string> str1 = Variable.StringOfLength(2, DiscreteChar.Digit());
            Variable <string> str2 = Variable.StringOfLength(3, DiscreteChar.Letter());
            Variable <string> str  = str1 + str2;

            var engine = new InferenceEngine();

            Assert.Equal(DiscreteChar.Digit(), engine.Infer <DiscreteChar>(Variable.GetItem(str, 0)), ProbEps);
            Assert.Equal(DiscreteChar.Digit(), engine.Infer <DiscreteChar>(Variable.GetItem(str, 1)), ProbEps);
            Assert.Equal(DiscreteChar.Letter(), engine.Infer <DiscreteChar>(Variable.GetItem(str, 2)), ProbEps);
            Assert.Equal(DiscreteChar.Letter(), engine.Infer <DiscreteChar>(Variable.GetItem(str, 3)), ProbEps);
            Assert.Equal(DiscreteChar.Letter(), engine.Infer <DiscreteChar>(Variable.GetItem(str, 4)), ProbEps);
            Assert.Throws <AllZeroException>(() => engine.Infer <DiscreteChar>(Variable.GetItem(str, 5)));
        }