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); }
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,:!"); }
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))); }