### Question:
LuceneDocumentStructure { public static NumericRangeQuery<Double> newInclusiveNumericRangeSeekQuery( Number lower, Number upper ) { Double min = lower != null ? lower.doubleValue() : null; Double max = upper != null ? upper.doubleValue() : null; return NumericRangeQuery.newDoubleRange( ValueEncoding.Number.key( 0 ), min, max, true, true ); } private  LuceneDocumentStructure(); static Document documentRepresentingProperties( long nodeId, Value... values ); static String encodedStringValuesForSampling( Value... values ); static MatchAllDocsQuery newScanQuery(); static Query newSeekQuery( Value... values ); static NumericRangeQuery<Double> newInclusiveNumericRangeSeekQuery( Number lower, Number upper ); static Query newRangeSeekByStringQuery( String lower, boolean includeLower,
            String upper, boolean includeUpper ); static Query newWildCardStringQuery( String searchFor ); static Query newRangeSeekByPrefixQuery( String prefix ); static Query newSuffixStringQuery( String suffix ); static Term newTermForChangeOrRemove( long nodeId ); static long getNodeId( Document from ); static TermsEnum originalTerms( Terms terms, String fieldKey ); static Field encodeValueField( Value value ); static boolean useFieldForUniquenessVerification( String fieldName ); static final String NODE_ID_KEY; static final String DELIMITER; }### Answer:
@Test void shouldBuildRangeSeekByNumberQueryForStrings() { NumericRangeQuery<Double> query = LuceneDocumentStructure.newInclusiveNumericRangeSeekQuery( 12.0d, null ); assertEquals( "number", query.getField() ); assertEquals( 12.0, query.getMin(), 0.001 ); assertTrue( query.includesMin() ); assertNull( query.getMax() ); assertTrue( query.includesMax() ); }