public void Search_CacheKeyStateAndPassedThroughStates_EngineDoesntUseCachedStatesWithDiffrentPassedThroughStates()
        {
            var tree   = new RepeatStateTree2();
            var engine = new SearchEngine(CacheMode.ReuseCache, CacheKeyType.StateAndPassedThroughStates)
            {
                SkipEvaluationForFirstNodeSingleNeighbor = false
            };

            engine.Search(tree.State1, 10);
            var result = engine.Search(tree.State2, 10); // This should put state3 into the cache with depth 1

            Assert.AreEqual(2, result.StateSequence.Count);
            Assert.AreEqual(tree.EndState1, result.StateSequence.Last());
        }
        public void Search_CacheKeyStateAndDepth_EngineRemembersUsedCachedStatesWithSameDiffrentDepth()
        {
            var tree   = new RepeatStateTree2();
            var engine = new SearchEngine(CacheMode.ReuseCache, CacheKeyType.StateAndDepth)
            {
                SkipEvaluationForFirstNodeSingleNeighbor = false
            };

            engine.Search(tree.State1, 10);
            var result = engine.Search(tree.State2, 10); // This should put state3 into the cache with depth 1

            Assert.AreEqual(1, result.StateSequence.Count);
            Assert.AreEqual(tree.State3, result.StateSequence.Last());
            Assert.IsTrue(result.FullTreeSearchedOrPruned);
        }