public override RecordGenerators_Generator <PropertyRecord> Property() { return((recordSize, format, recordId) => { PropertyRecord record = new PropertyRecord(recordId); int maxProperties = _random.intBetween(1, 4); StandaloneDynamicRecordAllocator stringAllocator = new StandaloneDynamicRecordAllocator(); StandaloneDynamicRecordAllocator arrayAllocator = new StandaloneDynamicRecordAllocator(); record.InUse = true; int blocksOccupied = 0; for (int i = 0; i < maxProperties && blocksOccupied < 4;) { PropertyBlock block = new PropertyBlock(); // Dynamic records will not be written and read by the property record format, // that happens in the store where it delegates to a "sub" store. PropertyStore.EncodeValue(block, _random.Next(_tokenBits), _random.nextValue(), stringAllocator, arrayAllocator, true); int tentativeBlocksWithThisOne = blocksOccupied + block.ValueBlocks.length; if (tentativeBlocksWithThisOne <= 4) { record.addPropertyBlock(block); blocksOccupied = tentativeBlocksWithThisOne; } } record.PrevProp = RandomLongOrOccasionallyNull(_propertyBits); record.NextProp = RandomLongOrOccasionallyNull(_propertyBits); return record; }); }