public virtual void TestPerStateBestSequenceFinder() { KBestSequenceFinder bsf = new KBestSequenceFinder(); BestSequenceFinderTest.ITestSequenceModel tsm2nr = new BestSequenceFinderTest.TestSequenceModel2nr(); RunSequencesFinder(tsm2nr, bsf); BestSequenceFinderTest.RunPossibleValuesChecker(tsm2nr, bsf); }
public static void RunSequencesFinder(BestSequenceFinderTest.ITestSequenceModel tsm, KBestSequenceFinder sf) { ICounter <int[]> bestLabelsCounter = sf.KBestSequences(tsm, K2nr); IList <int[]> topValues = Counters.ToSortedList(bestLabelsCounter); IEnumerator <int[]> iter = topValues.GetEnumerator(); for (int i = 0; i < K2nr; i++) { int[] sequence = iter.Current; string strSequence = Arrays.ToString(sequence); double score = bestLabelsCounter.GetCount(sequence); // Deal with ties in the scoring ... only tied pairs handled. bool found = false; if (strSequence.Equals(test2nrAnswers[i])) { found = true; } else { if (i > 0 && Math.Abs(score - test2nrScores[i - 1]) < 1e-8 && strSequence.Equals(test2nrAnswers[i - 1])) { found = true; } else { if (i + 1 < test2nrScores.Length && Math.Abs(score - test2nrScores[i + 1]) < 1e-8 && strSequence.Equals(test2nrAnswers[i + 1])) { found = true; } } } NUnit.Framework.Assert.IsTrue("Best sequence is wrong. Correct: " + test2nrAnswers[i] + ", found: " + strSequence, found); NUnit.Framework.Assert.AreEqual("Best sequence score is wrong.", test2nrScores[i], score, 1e-8); } }