public Value nextValue() { return randoms.nextValue(); }
public void reset() { random = new Random( seed ); randoms = RandomValues.create( random, config ); }
/** * Returns the next {@link Value}, distributed uniformly among the supported Value types. * * @see RandomValues */ public Value nextValue() { return nextValueOfType( among( ALL_TYPES ) ); }
/** * @see RandomValues */ public String[] nextStringArrayRaw( int minLength, int maxLength, int minStringLength, int maxStringLength ) { return nextArray( String[]::new, () -> nextStringRaw( minStringLength, maxStringLength, this::nextValidCodePoint ), minLength, maxLength ); }
/** * @see RandomValues */ public ZonedDateTime[] nextDateTimeArrayRaw( int minLength, int maxLength ) { return nextArray( ZonedDateTime[]::new, () -> nextZonedDateTimeRaw( UTC ), minLength, maxLength ); }
return nextBooleanValue(); case BYTE: return nextByteValue(); case SHORT: return nextShortValue(); case STRING: return nextTextValue(); case INT: return nextIntValue(); case LONG: return nextLongValue(); case FLOAT: return nextFloatValue(); case DOUBLE: return nextDoubleValue(); case CHAR: return nextCharValue(); case STRING_ALPHANUMERIC: return nextAlphaNumericTextValue(); case STRING_ASCII: return nextAsciiTextValue(); case STRING_BMP: return nextBasicMultilingualPlaneTextValue(); case LOCAL_DATE_TIME: return nextLocalDateTimeValue(); case DATE: return nextDateValue(); case LOCAL_TIME: return nextLocalTimeValue();
() -> random.randomValues().nextDateTimeValue(), () -> random.randomValues().nextLocalDateTimeValue(), () -> random.randomValues().nextDateValue(), () -> random.randomValues().nextTimeValue(), () -> random.randomValues().nextLocalTimeValue(), () -> random.randomValues().nextPeriod(), () -> random.randomValues().nextDuration(), () -> random.randomValues().nextCharValue(), () -> random.randomValues().nextTextValue(), () -> random.randomValues().nextAlphaNumericTextValue(), () -> random.randomValues().nextBooleanValue(), () -> random.randomValues().nextNumberValue(), () -> random.randomValues().nextDateTimeArray(), () -> random.randomValues().nextLocalDateTimeArray(), () -> random.randomValues().nextDateArray(), () -> random.randomValues().nextTimeArray(), () -> random.randomValues().nextLocalTimeArray(), () -> random.randomValues().nextDurationArray(), () -> random.randomValues().nextDurationArray(), () -> random.randomValues().nextCharArray(), () -> random.randomValues().nextTextArray(), () -> random.randomValues().nextAlphaNumericTextArray(), () -> random.randomValues().nextBooleanArray(), () -> random.randomValues().nextByteArray(), () -> random.randomValues().nextShortArray(), () -> random.randomValues().nextIntArray(), () -> random.randomValues().nextLongArray(), () -> random.randomValues().nextFloatArray(),
/** * Returns a randomly selected temporal value spread uniformly over the supported types. * * @return a randomly selected temporal value */ public Value nextTemporalValue() { int nextInt = generator.nextInt( 6 ); switch ( nextInt ) { case 0: return nextDateValue(); case 1: return nextLocalDateTimeValue(); case 2: return nextDateTimeValue(); case 3: return nextLocalTimeValue(); case 4: return nextTimeValue(); case 5: return nextDuration(); default: throw new IllegalArgumentException( nextInt + " not a valid temporal type" ); } }
private List<Value> generateRandomValues( Predicate<Value> predicate ) { int valuesToGenerate = 1000; RandomValues generator = RandomValues.create(); List<Value> values = new ArrayList<>( valuesToGenerate ); for ( int i = 0; i < valuesToGenerate; i++ ) { Value value; do { value = generator.nextValue(); } while ( !predicate.test( value ) ); values.add( value ); } return values; }
private void changeRandomNode( GraphDatabaseService db, int nodeCount, RandomValues random ) { try ( Transaction tx = db.beginTx() ) { long nodeId = random.nextInt( nodeCount ); Node node = db.getNodeById( nodeId ); Object[] keys = Iterables.asCollection( node.getPropertyKeys() ).toArray(); String key = (String) random.among( keys ); if ( random.nextFloat() < 0.1 ) { // REMOVE node.removeProperty( key ); } else { // CHANGE node.setProperty( key, random.nextValue().asObject() ); } tx.success(); } catch ( NotFoundException e ) { // It's OK, it happens if some other thread deleted that property in between us reading it and // removing or setting it } }
@Override public void run() RandomValues randomValues = RandomValues.create(); awaitLatch( startSignal ); while ( !endSignal.get() ) int operationType = randomValues.nextIntValue( 3 ).value(); switch ( operationType ) long targetNodeId = randomValues.nextLongValue( totalNodes ).value(); databaseService.getNodeById( targetNodeId ).delete(); break; case 1: long nodeId = randomValues.nextLongValue( totalNodes ).value(); Node node = databaseService.getNodeById( nodeId ); Map<String,Object> allProperties = node.getAllProperties(); for ( String key : allProperties.keySet() ) node.setProperty( key, randomValues.nextValue().asObject() ); nodeToUpdate.setProperty( "property", randomValues.nextValue().asObject() ); break; default:
/** * @see RandomValues */ public LocalTime[] nextLocalTimeArrayRaw( int minLength, int maxLength ) { return nextArray( LocalTime[]::new, this::nextLocalTimeRaw, minLength, maxLength ); }
public <T> T among( T[] among ) { return randoms.among( among ); }
ValueType[] allExceptNonSortable = RandomValues.excluding( ValueType.STRING, ValueType.STRING_ARRAY ); Value propValue = randomValues.nextValueOfTypes( allExceptNonSortable ); node.setProperty( "prop", propValue.asObject() ); Value pripValue = randomValues.nextValue(); node.setProperty( "prip", pripValue.asObject() );
@Override public 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.setInUse( 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.nextInt( tokenBits ), random.nextValue(), stringAllocator, arrayAllocator, true ); int tentativeBlocksWithThisOne = blocksOccupied + block.getValueBlocks().length; if ( tentativeBlocksWithThisOne <= 4 ) { record.addPropertyBlock( block ); blocksOccupied = tentativeBlocksWithThisOne; } } record.setPrevProp( randomLongOrOccasionallyNull( propertyBits ) ); record.setNextProp( randomLongOrOccasionallyNull( propertyBits ) ); return record; }; }
/** * @return the next {@link TextArray} containing strings with only characters in the Basic Multilingual Plane (BMP). * @see RandomValues */ public TextArray nextBasicMultilingualPlaneTextArray() { String[] array = nextArray( String[]::new, () -> nextStringRaw( minString(), maxString(), this::bmpCodePoint ), minArray(), maxArray() ); return Values.stringArray( array ); }
ValueType[] randomSetOfSupportedAndSortableTypes() { ValueType[] types = testSuite.supportedValueTypes(); types = removeSpatialTypes( types ); // <- don't use spatial values types = RandomValues.excluding( types, ValueType.STRING, ValueType.STRING_ARRAY ); // <- don't use strings outside of BMP types = random.randomValues().selection( types, 2, types.length, false ); return types; }
ValueType[] allExceptNonOrderable = RandomValues.excluding( ValueType.STRING, ValueType.STRING_ARRAY, ValueType.CARTESIAN_POINT_3D_ARRAY ); targetedTypes = randomValues.selection( allExceptNonOrderable, 1, allExceptNonOrderable.length, false ); try ( Transaction tx = graphDb.beginTx() ) do propValue = randomValues.nextValueOfTypes( targetedTypes ); pripValue = randomValues.nextValueOfTypes( targetedTypes ); singleValue = new NodeValueTuple( node.getId(), propValue ); doubleValue = new NodeValueTuple( node.getId(), propValue, pripValue );