Esempio n. 1
0
        public void PerformanceTestByteArraySerialization()
        {
            long before;

            UInt32 value;

            Byte[] array = new Byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };

            before = Stopwatch.GetTimestamp();
            for (int i = 0; i < 10000000; i++)
            {
                value = (UInt32)(
                    (0xFF000000U & (array[0] << 24)) |
                    (0x00FF0000U & (array[1] << 16)) |
                    (0x0000FF00U & (array[2] << 8)) |
                    (0x000000FFU & (array[3])));
            }
            Console.WriteLine((Stopwatch.GetTimestamp() - before).StopwatchTicksAsInt64Milliseconds());

            before = Stopwatch.GetTimestamp();
            for (int i = 0; i < 10000000; i++)
            {
                value = BitConverter.ToUInt32(array, 1);
            }
            Console.WriteLine((Stopwatch.GetTimestamp() - before).StopwatchTicksAsInt64Milliseconds());

            before = Stopwatch.GetTimestamp();
            for (int i = 0; i < 10000000; i++)
            {
                value = array.BigEndianReadUInt32(1);
            }
            Console.WriteLine((Stopwatch.GetTimestamp() - before).StopwatchTicksAsInt64Milliseconds());
        }
        public void TestBigEndianSerializationForLargeIntegerTypes()
        {
            Byte[] buffer = new Byte[256];

            // UInt32
            {
                Console.WriteLine("-----------------------------------------");
                Console.WriteLine("Testing UInt32...");
                Console.WriteLine("-----------------------------------------");
                UInt32[] testValues = new UInt32[] { 0, 0x80, 0x800000, 0x80000000, 0xFF, 0xFFFF, 0xFFFFFF, 0xFFFFFFF, 0xFFFFFFFF,
                                                     0x7F, 0x7FFFFF, 0x7FFFFFFF, 0x100, 0x80, 0xFF, 1, 2, 0x128EF92E, 0xFF00FF00, 0x12345678 };
                for (UInt32 i = 0; i < testValues.Length; i++)
                {
                    UInt32 testValue = testValues[i];
                    Console.WriteLine(testValue);
                    Console.WriteLine(testValue);
                    buffer.BigEndianSetUInt32(i, testValue);
                    Assert.AreEqual((Byte)(testValue >> 24), buffer[i]);
                    Assert.AreEqual((Byte)(testValue >> 16), buffer[i + 1]);
                    Assert.AreEqual((Byte)(testValue >> 8), buffer[i + 2]);
                    Assert.AreEqual((Byte)testValue, buffer[i + 3]);
                    Assert.AreEqual(testValue, buffer.BigEndianReadUInt32(i));
                }
            }

            // Int32
            {
                Console.WriteLine("-----------------------------------------");
                Console.WriteLine("Testing Int32...");
                Console.WriteLine("-----------------------------------------");
                Int32[] testValues = new Int32[] { 0, 0x80, 0x800000, -1, 0xFF, 0xFFFF, 0xFFFFFF, 0xFFFFFFF,
                                                   0x7F, 0x7FFFFF, 0x7FFFFFFF, 0x100, 0x80, 0xFF, 1, 2, 0x128EF92E, 0x7F00FF00, 0x12345678 };
                for (UInt32 i = 0; i < testValues.Length; i++)
                {
                    Int32 testValue = testValues[i];
                    Console.WriteLine(testValue);
                    buffer.BigEndianSetInt32(i, testValue);
                    Assert.AreEqual((Byte)(testValue >> 24), buffer[i]);
                    Assert.AreEqual((Byte)(testValue >> 16), buffer[i + 1]);
                    Assert.AreEqual((Byte)(testValue >> 8), buffer[i + 2]);
                    Assert.AreEqual((Byte)testValue, buffer[i + 3]);
                    Assert.AreEqual(testValue, buffer.BigEndianReadInt32(i));
                }
                for (UInt32 i = 0; i < testValues.Length; i++)
                {
                    Int32 testValue = -testValues[i];
                    Console.WriteLine(testValue);
                    buffer.BigEndianSetInt32(i, testValue);
                    Assert.AreEqual((Byte)(testValue >> 24), buffer[i]);
                    Assert.AreEqual((Byte)(testValue >> 16), buffer[i + 1]);
                    Assert.AreEqual((Byte)(testValue >> 8), buffer[i + 2]);
                    Assert.AreEqual((Byte)testValue, buffer[i + 3]);
                    Assert.AreEqual(testValue, buffer.BigEndianReadInt32(i));
                }
            }

            /*
             * // UInt64
             * {
             *  Console.WriteLine("-----------------------------------------");
             *  Console.WriteLine("Testing UInt64...");
             *  Console.WriteLine("-----------------------------------------");
             *  UInt64[] testValues = new UInt64[] { 0, 0x80, 0x800000, 0x80000000, 0xFF, 0xFFFF, 0xFFFFFF, 0xFFFFFFF, 0xFFFFFFFF,
             *      0x7F, 0x7FFFFF, 0x7FFFFFFF,  0x100, 0x80, 0xFF, 1, 2, 0x128EF92E, 0xFF00FF00, 0x12345678 };
             *  for (int i = 0; i < testValues.Length; i++)
             *  {
             *      UInt64 testValue = testValues[i];
             *      Console.WriteLine(testValue);
             *      Console.WriteLine(testValue);
             *      buffer.BigEndianSetUInt64(i, testValue);
             *      Assert.AreEqual((Byte)(testValue >> 24), buffer[i]);
             *      Assert.AreEqual((Byte)(testValue >> 16), buffer[i + 1]);
             *      Assert.AreEqual((Byte)(testValue >> 8), buffer[i + 2]);
             *      Assert.AreEqual((Byte)testValue, buffer[i + 3]);
             *      Assert.AreEqual(testValue, buffer.BigEndianReadUInt64(i));
             *  }
             * }
             */
        }