private void Pop(SequencedDictionary<char, string> dict)
 {
     Enumerable
         .Range(0, dict.Count())
         .Select(i => dict.Pop())
         .ToList();
 }
        public void Test()
        {
            var dict = new SequencedDictionary<char, string>();
            dict.Add("sam", "sam");
            dict.Add("sa", "sa");
            dict.Add("zebra", "zebra");
            dict.Add("ze", "ze");
            dict.Add("charlie", "charlie");
            dict.Add("te", "te");

            dict.Push('s');
            Assert.AreEqual(0, dict.Count());
            dict.Push('a');
            Assert.AreEqual(0, dict.Count());
            dict.Push('m');
            Assert.AreEqual(1, dict.Count());
            Assert.AreEqual("sam", dict.Pop().Value);

            dict.Push('z');
            dict.Push('e');
            dict.Push('b');
            dict.Push('d');
            Assert.AreEqual("ze", dict.Pop().Value);

            var dictPop = dict.Pop();
            Assert.AreEqual('b', dictPop.Keys.Single());
            Assert.IsNull(dictPop.Value);

            dictPop = dict.Pop();
            Assert.AreEqual('d', dictPop.Keys.Single());
            Assert.IsNull(dictPop.Value);

            dict.Push('c');
            Assert.AreEqual(0, dict.Count());
            dict.Push('h');
            Assert.AreEqual(0, dict.Count());
            dict.Push('d');
            Assert.AreEqual(3, dict.Count());

            dictPop = dict.Pop();
            Assert.AreEqual('c', dictPop.Keys.Single());
            Assert.IsNull(dictPop.Value);

            dictPop = dict.Pop();
            Assert.AreEqual('h', dictPop.Keys.Single());
            Assert.IsNull(dictPop.Value);

            dictPop = dict.Pop();
            Assert.AreEqual('d', dictPop.Keys.Single());
            Assert.IsNull(dictPop.Value);

            dict.Push('t');
            dict.Push('e');
            Assert.AreEqual(1, dict.Count());
            Assert.AreEqual("te", dict.Pop().Value);

            /*            var dict = new SequencedDictionary<char, string>();
            dict.Add("sam", "sam");
            dict.Add("s", "s");

            SequencedDictionary<char, string>.ResultToken token = null;
            token = dict.Get('s', token);
            token = dict.Get('a', token);
            token = dict.Get('p', token);
            Assert.IsFalse(token.IsComplete);
            Assert.AreEqual(1, token.Values.Count());
            Assert.AreEqual("s", token.Values.First());

            token = null;
            token = dict.Get('s', token);
            token = dict.Get('a', token);
            token = dict.Get('m', token);
            Assert.IsTrue(token.IsComplete);
            Assert.AreEqual(1, token.Values.Count());
            Assert.AreEqual("sam", token.Values.First());*/
        }