public void CircularQueue_push_cmp()
 {
     CircularQueue<int> x = new CircularQueue<int>(3);
     x.push(10);
     Assert.IsTrue(x.cmp(new[] { 10 }));
     x.push(15);
     Assert.IsTrue(x.cmp(new[] { 10, 15}));
     x.push(20);
     Assert.IsTrue(x.cmp(new[] { 10, 15, 20 }));
     x.push(25);
     Assert.IsTrue(x.cmp(new[] { 15, 20, 25 }));
 }
예제 #2
0
        /// <summary>
        /// Поиск подпоследовательности в потоке данных
        /// </summary>
        /// <remarks>
        /// Простейший вариант алгоритма Бойера — Мура
        /// </remarks>
        /// <param name="file">Поток данных</param>
        /// <param name="template">Подпоследовательность</param>
        /// <returns>true - если найдена</returns>
        public static bool searchInFile(Stream file, IList<byte> template)
        {
            // incorrect input
            if (file == null
                || template == null
                || template.Count == 0)
                return false;

            CircularQueue<byte> buff = new CircularQueue<byte>(template.Count);

            for (int t = file.ReadByte(); t != -1; t = file.ReadByte())
            {
                buff.push((byte)t);

                if (template.Last().Equals((byte)t))
                {
                    if (buff.cmp(template))
                        return true;
                }
            }
            return false;
        }