示例#1
0
        private static void Test(ISubstringsFinder algo, string text, string pattern, List <int> expected)
        {
            var actual = algo.FindAll(text, pattern);

            Assert.AreEqual(expected.Count, actual.Count);
            for (var i = 0; i < actual.Count; i++)
            {
                Assert.AreEqual(expected[i], actual[i]);
            }
        }
示例#2
0
        public static void PatternLongerThanText(ISubstringsFinder algo)
        {
            var pattern = "колоколколокол";

            var text = "кол";

            var expected = new List <int>();

            Test(algo, text, pattern, expected);
        }
示例#3
0
        public static void PatternTextAreEqual(ISubstringsFinder algo)
        {
            var pattern = "колокол";

            var text = pattern;

            var expected = new List <int> {
                0
            };

            Test(algo, text, pattern, expected);
        }
示例#4
0
        public static void FindOneLetter(ISubstringsFinder algo)
        {
            var letter  = 'р';
            var pattern = letter.ToString();

            #region text

            var text = @"Не выходи из комнаты, не совершай ошибку.
     Зачем тебе Солнце, если ты куришь Шипку?
     За дверью бессмысленно все, особенно -- возглас счастья.
     Только в уборную -- и сразу же возвращайся.

     О, не выходи из комнаты, не вызывай мотора.
     Потому что пространство сделано из коридора
     и кончается счетчиком. А если войдет живая
     милка, пасть разевая, выгони не раздевая.

     Не выходи из комнаты; считай, что тебя продуло.
     Что интересней на свете стены и стула?
     Зачем выходить оттуда, куда вернешься вечером
     таким же, каким ты был, тем более -- изувеченным?

     О, не выходи из комнаты. Танцуй, поймав, боссанову
     в пальто на голое тело, в туфлях на босу ногу.
     В прихожей пахнет капустой и мазью лыжной.
     Ты написал много букв; еще одна будет лишней.

     Не выходи из комнаты. О, пускай только комната
     догадывается, как ты выглядишь. И вообще инкогнито
     эрго сум, как заметила форме в сердцах субстанция.
     Не выходи из комнаты! На улице, чай, не Франция.

     Не будь дураком! Будь тем, чем другие не были.
     Не выходи из комнаты! То есть дай волю мебели,
     слейся лицом с обоями. Запрись и забаррикадируйся
     шкафом от хроноса, космоса, эроса, расы, вируса.";

            #endregion

            var expected = new List <int>();
            for (var i = 0; i < text.Length; i++)
            {
                if (text[i] == letter)
                {
                    expected.Add(i);
                }
            }

            Test(algo, text, pattern, expected);
        }
示例#5
0
        public static void ManyTimesRepeatedA(ISubstringsFinder algo)
        {
            var text    = new string('a', (int)1e6);
            var pattern = new string('a', (int)1e4);

            var expected = new List <int>();

            for (var i = 0; i <= text.Length - pattern.Length; i++)
            {
                expected.Add(i);
            }

            Test(algo, text, pattern, expected);
        }
示例#6
0
        private static void Solve(string pattern, string text, ISubstringsFinder algo)
        {
            var sw = new Stopwatch();

            sw.Start();

            var res = algo.FindAll(text, pattern);

            sw.Stop();

            Console.WriteLine("Count: {0}", res.Count);
            Console.WriteLine("Time: {0}", sw.ElapsedMilliseconds);
            //foreach (var x in algo.FindAll(text, pattern))
            //    Console.Write(x + " ");

            GC.Collect();
        }
示例#7
0
        public static void ManyTimesRepeatedPattern(ISubstringsFinder algo)
        {
            var pattern = "колоколколокол";

            var text = pattern;

            for (var i = 0; i < 20; i++)
            {
                text += text;
            }

            var expected = new List <int>();
            var delta    = pattern.Length / 2;

            for (var i = 0; i <= text.Length - pattern.Length; i += delta)
            {
                expected.Add(i);
            }

            Test(algo, text, pattern, expected);
        }
示例#8
0
 public static void EmptyText(ISubstringsFinder algo)
 {
     Test(algo, "", "not empty pattern", new List <int>());
 }