public void TestCacheClearAfterSentenceChange()
        {
            var generator = new CachedFeatureGenerator(identityGenerator);

            const int testIndex = 0;

            // use generator with sentence 1
            generator.CreateFeatures(features, testSentence1, testIndex, null);

            features.Clear();

            // use another sentence but same index
            generator.CreateFeatures(features, testSentence2, testIndex, null);

            Assert.AreEqual(2, generator.NumberOfCacheMisses);
            Assert.AreEqual(0, generator.NumberOfCacheHits);

            Assert.True(features.Contains(testSentence2[testIndex]));

            Assert.AreEqual(1, features.Count);

            features.Clear();

            // check if features are really cached
            var expectedToken = testSentence2[testIndex];

            testSentence2[testIndex] = null;

            generator.CreateFeatures(features, testSentence2, testIndex, null);

            Assert.True(features.Contains(expectedToken));

            Assert.AreEqual(1, features.Count);
        }
 static NameFinderEventStream()
 {
     defaultGenerators = new CachedFeatureGenerator(
         new WindowFeatureGenerator(new TokenFeatureGenerator(), 2, 2),
         new WindowFeatureGenerator(new TokenClassFeatureGenerator(true), 2, 2),
         new OutcomePriorFeatureGenerator(),
         new PreviousMapFeatureGenerator(),
         new BigramNameFeatureGenerator()
         );
 }
        public void TestCachingOfSentence()
        {
            var generator = new CachedFeatureGenerator(identityGenerator);

            const int testIndex  = 0;
            const int testIndex2 = testIndex + 1;

            // after this call features are cached for testIndex
            generator.CreateFeatures(features, testSentence1, testIndex, null);

            Assert.AreEqual(1, generator.NumberOfCacheMisses);
            Assert.AreEqual(0, generator.NumberOfCacheHits);

            Assert.True(features.Contains(testSentence1[testIndex]));

            features.Clear();

            // check if features are really cached

            var expectedToken = testSentence1[testIndex];

            testSentence1[testIndex] = null;

            generator.CreateFeatures(features, testSentence1, testIndex, null);

            Assert.AreEqual(1, generator.NumberOfCacheMisses);
            Assert.AreEqual(1, generator.NumberOfCacheHits);

            Assert.True(features.Contains(expectedToken));

            Assert.AreEqual(1, features.Count);

            features.Clear();

            // try caching with an other index

            generator.CreateFeatures(features, testSentence1, testIndex2, null);

            Assert.AreEqual(2, generator.NumberOfCacheMisses);
            Assert.AreEqual(1, generator.NumberOfCacheHits);

            Assert.True(features.Contains(testSentence1[testIndex2]));

            features.Clear();

            // now check if cache still contains feature for testIndex

            generator.CreateFeatures(features, testSentence1, testIndex, null);

            Assert.True(features.Contains(expectedToken));
        }