Exemplo n.º 1
0
        public void VerifyXor()
        {
            var left  = Enumerable.Range(0, 300).SelectMany(x => BitConverter.GetBytes(x * 27)).ToArray().AsBucket();
            var right = Enumerable.Range(0, 300).Reverse().SelectMany(x => BitConverter.GetBytes(x * 31)).ToArray().AsBucket();

            var xorResult = new BitwiseXorBucket(left, right).ToArray().SelectPer(4).Select(x => BitConverter.ToInt32(x, 0));


            Assert.IsTrue(xorResult.SequenceEqual(Enumerable.Range(0, 300).Select(x => x * 27).Zip(Enumerable.Range(0, 300).Reverse().Select(x => x * 31), (x, y) => x ^ y)));


            left  = Enumerable.Range(0, 600).SelectMany(x => BitConverter.GetBytes(x * 27)).ToArray().AsBucket();
            right = Enumerable.Range(0, 300).Reverse().SelectMany(x => BitConverter.GetBytes(x * 31)).ToArray().AsBucket();

            xorResult = new BitwiseXorBucket(left, right).ToArray().SelectPer(4).Select(x => BitConverter.ToInt32(x, 0));

            Assert.IsTrue(xorResult.SequenceEqual(Enumerable.Range(0, 600).Select(x => x * 27).Zip(Enumerable.Range(0, 300).Reverse().Select(x => x * 31).Concat(Enumerable.Range(0, 300).Select(x => 0)), (x, y) => x ^ y)));


            left  = Enumerable.Range(0, 300).SelectMany(x => BitConverter.GetBytes(x * 27)).ToArray().AsBucket();
            right = Enumerable.Range(0, 600).Reverse().SelectMany(x => BitConverter.GetBytes(x * 31)).ToArray().AsBucket();

            xorResult = new BitwiseXorBucket(left, right).ToArray().SelectPer(4).Select(x => BitConverter.ToInt32(x, 0));

            Assert.IsTrue(xorResult.SequenceEqual(Enumerable.Range(0, 300).Select(x => x * 27).Concat(Enumerable.Range(0, 300).Select(x => 0)).Zip(Enumerable.Range(0, 600).Reverse().Select(x => x * 31), (x, y) => x ^ y)));
        }
Exemplo n.º 2
0
        public async Task Read4BitmapsXor()
        {
            string bmpFile = FindResource("*.bitmap") ?? throw new InvalidOperationException("Bitmap not found");

            var fb = FileBucket.OpenRead(bmpFile);


            var headers = await fb.ReadFullAsync(32); // Skip headers

            uint count = NetBitConverter.ToUInt32(headers, 8);

            Assert.AreEqual(106u, count);

            List <GitEwahBitmapBucket> buckets = new List <GitEwahBitmapBucket>();

            for (int i = 0; i < 4; i++)
            {
                buckets.Add(new GitEwahBitmapBucket(fb.Duplicate(false)));

                await fb.ReadNetworkUInt32Async();           // Bitlength

                uint u2 = await fb.ReadNetworkUInt32Async(); // Compressed length

                for (uint n = 0; n < u2; n++)
                {
                    await fb.ReadNetworkUInt64Async();
                }
                await fb.ReadNetworkUInt32Async(); // Last RLW start
            }

            var allXor = new BitwiseXorBucket(new BitwiseXorBucket(buckets[0], buckets[1]), new BitwiseXorBucket(buckets[2], buckets[3]));

            int maxBits = buckets.Max(x => x.ReadBitLengthAsync().AsTask().Result);

            Assert.AreEqual(2369, maxBits);
            var bb = await allXor.ReadFullAsync((maxBits + 7) / 8);

            for (int i = 0; i < bb.Length - 1; i++)
            {
                Assert.AreEqual((byte)0xFF, bb[i]);
            }
        }