Exemplo n.º 1
0
        public void ReplaceTabToSpaces()
        {
            var indentationSize = 0;
            var hasTabs         = false;

            for (int i = 0; i < InternalString.Length; i++)
            {
                var c = InternalString[i];
                if (!(c == ' ' || c == '\t'))
                {
                    break;
                }

                if (c == '\t')
                {
                    hasTabs = true;
                }

                indentationSize = i;
            }

            if (hasTabs)
            {
                var firstSubString  = InternalString.Substring(0, indentationSize + 1);
                var secondSubString = InternalString.Substring(indentationSize + 1, InternalString.Length - indentationSize - 1);
                InternalString = string.Concat(firstSubString.Replace("\t", "    "), secondSubString);
                IsChanged      = true;
            }
        }
Exemplo n.º 2
0
        public void ResultIsNotEmpty()
        {
            var    internalStr = new InternalString();
            string text        = "some text { internal text } ";

            var result = internalStr.Unpack(text);

            Assert.AreNotEqual(result.Text, string.Empty, "Result should not be empty");
            Assert.AreNotEqual(result.InternalTexts.Count, 0, "List should not be empty");
        }
Exemplo n.º 3
0
        public void RemoveEndSpaces()
        {
            int end = InternalString.Length - 1;

            while (end >= 0 && char.IsWhiteSpace(InternalString[end]))
            {
                --end;
            }

            if (end != InternalString.Length - 1)
            {
                InternalString = InternalString.Substring(0, end + 1);
            }
        }
        public void InternalSAISNaive()
        {
            for (int n = 1; n <= 5; n++)
            {
                int m = 1;
                for (int i = 0; i < n; i++)
                {
                    m *= 4;
                }
                for (int f = 0; f < m; f++)
                {
                    var s     = new int[n];
                    int g     = f;
                    int max_c = 0;
                    for (int i = 0; i < n; i++)
                    {
                        s[i]  = g % 4;
                        max_c = Math.Max(max_c, s[i]);
                        g    /= 4;
                    }

                    var sa = InternalString.SAIS(s, max_c, -1, -1);
                    sa.Should().Equal(SaNaive(s));
                }
            }
            for (int n = 1; n <= 10; n++)
            {
                int m = 1;
                for (int i = 0; i < n; i++)
                {
                    m *= 2;
                }
                for (int f = 0; f < m; f++)
                {
                    var s     = new int[n];
                    int g     = f;
                    int max_c = 0;
                    for (int i = 0; i < n; i++)
                    {
                        s[i]  = g % 2;
                        max_c = Math.Max(max_c, s[i]);
                        g    /= 2;
                    }

                    var sa = InternalString.SAIS(s, max_c, -1, -1);
                    sa.Should().Equal(SaNaive(s));
                }
            }
        }
        public void InternalSADoublingNaive()
        {
            for (int n = 1; n <= 5; n++)
            {
                int m = 1;
                for (int i = 0; i < n; i++)
                {
                    m *= 4;
                }
                for (int f = 0; f < m; f++)
                {
                    var s = new int[n];
                    int g = f;
                    for (int i = 0; i < n; i++)
                    {
                        s[i] = g % 4;
                        g   /= 4;
                    }

                    var sa = InternalString.SADoubling(s);
                    sa.Should().Equal(SaNaive(s));
                }
            }
            for (int n = 1; n <= 10; n++)
            {
                int m = 1;
                for (int i = 0; i < n; i++)
                {
                    m *= 2;
                }
                for (int f = 0; f < m; f++)
                {
                    var s = new int[n];
                    int g = f;
                    for (int i = 0; i < n; i++)
                    {
                        s[i] = g % 2;
                        g   /= 2;
                    }

                    var sa = InternalString.SADoubling(s);
                    sa.Should().Equal(SaNaive(s));
                }
            }
        }
Exemplo n.º 6
0
        public static int[] SuffixArray <T>(ReadOnlySpan <T> s)
        {
            var idx = CreateIdx(s);
            var s2  = new int[s.Length];
            var now = 0;

            // 座標圧縮
            for (int i = 0; i < idx.Length; i++)
            {
                if (i > 0 && !EqualityComparer <T> .Default.Equals(s[idx[i - 1]], s[idx[i]]))
                {
                    now++;
                }
                s2[idx[i]] = now;
            }

            return(InternalString.SAIS(s2, now));
        }
Exemplo n.º 7
0
        public void Case2()
        {
            var    internalStr = new InternalString();
            var    fileName    = Path.Combine(GetTestDir(), "case2.txt");
            string text        = File.ReadAllText(fileName);

            var result = internalStr.Unpack(text);

            Console.WriteLine(result.Text);

            int i = 1;

            foreach (var item in result.InternalTexts)
            {
                Console.WriteLine("********** " + i);
                Console.WriteLine(item);
                Console.WriteLine("********** " + i);
                i++;
            }
        }
Exemplo n.º 8
0
 public static int[] SuffixArray(int[] s, int upper)
 {
     Contract.Assert(0U <= (uint)upper, reason: $"{nameof(upper)} must be positive.");
     Contract.Assert(s.All(si => (uint)si <= (uint)upper), reason: $"si ∈ {nameof(s)} must be 0 <= si && si <= {nameof(upper)}");
     return(InternalString.SAIS(s, upper));
 }