예제 #1
0
        static void Main(string[] args)
        {
            long tot0 = 0, tot1 = 0;
            var  watch = new Stopwatch();

            for (int reps1 = 0; reps1 < 5; ++reps1)
            {
                // Benchmark the .NET provided binary searcher.
                watch.Reset();
                watch.Start();
                for (int rx = 0; rx < reps; ++rx)
                {
                    for (var ix = 0; ix < Map1252.Length; ++ix)
                    {
                        var pos = Map1252.ArrayBinarySearch(Map1252.At(ix) & 0x7FFFFF00);
                        var fit = Map1252.At(~pos) & 0xFF;
                        Debug.Assert(ix == ~pos);
                    }
                }
                tot0 += watch.ElapsedMilliseconds;

                // Benchmark the custom binary searcher.
                watch.Reset();
                watch.Start();
                for (int rx = 0; rx < reps; ++rx)
                {
                    for (var ix = 0; ix < Map1252.Length; ++ix)
                    {
                        var result = Map1252.To1252Bestfit(Map1252.At(ix) >> 8);
                        Debug.Assert(result == (Map1252.At(ix) & 0xFF));
                    }
                }
                tot1 += watch.ElapsedMilliseconds;
            }

            Console.WriteLine("Custom binary search change over Array.BinarySearch = " + 100f * (tot0 - tot1) / tot0 + "%");

            /* Output:
             *
             * Custom binary search change over Array.BinarySearch = 32.51122%
             *
             */
        }
예제 #2
0
        public void Test_Map1252Search()
        {
            for (var ix = 0; ix < Map1252.Length; ++ix)
            {
                var expectedResult = Map1252.At(ix) & 0xFF;
                var result         = Map1252.To1252Bestfit(Map1252.At(ix) >> 8);

                Assert.IsTrue(expectedResult > 0);
                Assert.IsTrue(result == expectedResult);
            }

            var minvalResult = Map1252.To1252Bestfit(0);
            var maxvalResult = Map1252.To1252Bestfit(0x10FFFF);

            Assert.IsTrue(minvalResult == 0);

            // U+10FFFF not expected and not actually against the spec.
            Assert.IsTrue(maxvalResult < 0);
        }