public void TestCYK01() {
var productions = new List<Production> {
new Production(
Nonterminal.Of("S"),
new Sentence { Nonterminal.Of("X"), Nonterminal.Of("X") },
2
),
new Production(
Nonterminal.Of("X"),
new Sentence { Nonterminal.Of("X"), Nonterminal.Of("X") },
2
),
new Production(
Nonterminal.Of("S"),
new Sentence { Terminal.Of("a") },
8
),
new Production(
Nonterminal.Of("X"),
new Sentence { Terminal.Of("a") },
8
)
};
var g = new CNFGrammar(productions, Nonterminal.Of("S"));
Helpers.AssertNear(0.8, g.Cyk(Sentence.FromLetters("a")));
Helpers.AssertNear(0.128, g.Cyk(Sentence.FromLetters("aa")));
Helpers.AssertNear(0.04096, g.Cyk(Sentence.FromLetters("aaa")));
Helpers.AssertNear(0.016384, g.Cyk(Sentence.FromLetters("aaaa")));
Helpers.AssertNear(0.007340032, g.Cyk(Sentence.FromLetters("aaaaa")));
}