Beispiel #1
0
        private Core.Bloom GetBloom(params LogEntry[] logEntries)
        {
            var bloom = new Core.Bloom();

            bloom.Add(logEntries);
            return(bloom);
        }
Beispiel #2
0
        public void Can_find_bloom_with_fromBlock_offset(long from, long to, long[] blocksSet, int[] levels)
        {
            var storage = CreateBloomStorage(new BloomConfig()
            {
                IndexLevelBucketSizes = levels
            });
            var bloom = new Core.Bloom();

            byte[] bytes = { 1, 2, 3 };
            bloom.Set(bytes);
            foreach (var blockNumber in blocksSet)
            {
                if (blockNumber > storage.MaxBlockNumber + 1)
                {
                    // Assert.Fail($"Missing blocks. Trying inserting {blockNumber}, when current max block is {storage.MaxBlockNumber}.");
                }
                storage.Store(blockNumber, bloom);
            }

            var          bloomEnumeration = storage.GetBlooms(from, to);
            IList <long> foundBlocks      = new List <long>(blocksSet.Length);

            foreach (var b in bloomEnumeration)
            {
                if (b.Matches(bytes) && bloomEnumeration.TryGetBlockNumber(out var block))
                {
                    foundBlocks.Add(block);
                }
            }

            var expectedFoundBlocks = blocksSet.Where(b => b >= from && b <= to).ToArray();

            TestContext.Out.WriteLine($"Expected found blocks: {string.Join(", ", expectedFoundBlocks)}");
            foundBlocks.Should().BeEquivalentTo(expectedFoundBlocks);
        }
Beispiel #3
0
        public bool Matches(Core.Bloom bloom)
        {
            if (Addresses != null)
            {
                bool result  = true;
                var  indexes = AddressesBloomExtracts;
                for (var i = 0; i < indexes.Length; i++)
                {
                    var index = indexes[i];
                    result = bloom.Matches(ref index);
                    if (result)
                    {
                        break;
                    }
                }

                return(result);
            }
            else if (Address == null)
            {
                return(true);
            }
            else
            {
                return(bloom.Matches(AddressBloomExtract));
            }
        }
Beispiel #4
0
        public override bool Matches(Core.Bloom bloom)
        {
            for (int i = 0; i < _subexpression.Length; i++)
            {
                if (_subexpression[i].Matches(bloom))
                {
                    return(true);
                }
            }

            return(false);
        }
Beispiel #5
0
        public bool Matches(Core.Bloom bloom)
        {
            bool result = true;

            for (int i = 0; i < _expressions.Length; i++)
            {
                result = _expressions[i].Matches(bloom);
                if (!result)
                {
                    break;
                }
            }

            return(result);
        }
Beispiel #6
0
        public void Store(long blockNumber, Core.Bloom bloom)
        {
            for (int i = 0; i < _storageLevels.Length; i++)
            {
                _storageLevels[i].Store(blockNumber, bloom);
            }

            if (blockNumber < MinBlockNumber)
            {
                MinBlockNumber = blockNumber;
                Set(MinBlockNumberKey, MinBlockNumber);
            }

            if (blockNumber > MaxBlockNumber)
            {
                MaxBlockNumber = blockNumber;
                Set(MaxBlockNumberKey, MaxBlockNumber);
            }
        }
Beispiel #7
0
        public void Can_safely_insert_concurrently()
        {
            _config.IndexLevelBucketSizes = new[] { byte.MaxValue + 1 };
            var storage = new BloomStorage(_config, _bloomDb, _fileStoreFactory);

            Core.Bloom expectedBloom = new Core.Bloom();
            for (int i = 0; i <= byte.MaxValue; i++)
            {
                expectedBloom.Set(i);
            }

            Parallel.For(0, byte.MaxValue * byte.MaxValue * 2, i =>
            {
                var bloom = new Core.Bloom();
                bloom.Set(i % Core.Bloom.BitLength);
                storage.Store(i, bloom);
            });

            var first = storage.GetBlooms(0, byte.MaxValue * 3).First();

            first.Should().Be(expectedBloom);
        }
Beispiel #8
0
 public override bool Matches(Core.Bloom bloom) => bloom.Matches(BloomExtract);
Beispiel #9
0
 public override bool Matches(Core.Bloom bloom) => true;
Beispiel #10
0
 public bool Matches(Core.Bloom bloom) => AddressFilter.Matches(bloom) && TopicsFilter.Matches(bloom);
Beispiel #11
0
 public abstract bool Matches(Core.Bloom bloom);
Beispiel #12
0
 public void Store(long blockNumber, Core.Bloom bloom)
 {
 }
Beispiel #13
0
 public bool Matches(Core.Bloom bloom)
 {
     return(AddressFilter.Matches(bloom) && TopicsFilter.Matches(bloom));
 }