### Question:
Range implements AutoCloseable { @JsonCreator public Range( @JsonProperty("low") Marker low, @JsonProperty("high") Marker high) { requireNonNull(low, "low value is null"); requireNonNull(high, "high value is null"); if (!low.getType().equals(high.getType())) { throw new IllegalArgumentException( String.format("Marker types do not match: %s vs %s", low.getType(), high.getType())); } if (low.getBound() == Marker.Bound.BELOW) { throw new IllegalArgumentException("low bound must be EXACTLY or ABOVE"); } if (high.getBound() == Marker.Bound.ABOVE) { throw new IllegalArgumentException("high bound must be EXACTLY or BELOW"); } if (low.compareTo(high) > 0) { throw new IllegalArgumentException("low must be less than or equal to high"); } this.low = low; this.high = high; } @JsonCreator  Range(
            @JsonProperty("low") Marker low,
            @JsonProperty("high") Marker high); static Range all(BlockAllocator allocator, ArrowType type); static Range greaterThan(BlockAllocator allocator, ArrowType type, Object low); static Range greaterThanOrEqual(BlockAllocator allocator, ArrowType type, Object low); static Range lessThan(BlockAllocator allocator, ArrowType type, Object high); static Range lessThanOrEqual(BlockAllocator allocator, ArrowType type, Object high); static Range equal(BlockAllocator allocator, ArrowType type, Object value); static Range range(BlockAllocator allocator, ArrowType type, Object low, boolean lowInclusive, Object high, boolean highInclusive); ArrowType getType(); @JsonProperty Marker getLow(); @JsonProperty Marker getHigh(); @Transient boolean isSingleValue(); @Transient Object getSingleValue(); @Transient boolean isAll(); boolean includes(ValueMarker marker); boolean contains(Range other); Range span(Range other); boolean overlaps(Range other); Range intersect(Range other); @Override int hashCode(); @Override boolean equals(Object obj); @Override String toString(); @Override void close();  }### Answer:
@Test public void testRange() throws Exception { Range range = Range.range(allocator, BIGINT.getType(), 0L, false, 2L, true); assertEquals(range.getLow(), Marker.above(allocator, BIGINT.getType(), 0L)); assertEquals(range.getHigh(), Marker.exactly(allocator, BIGINT.getType(), 2L)); assertFalse(range.isSingleValue()); assertFalse(range.isAll()); assertEquals(range.getType(), BIGINT.getType()); assertFalse(range.includes(Marker.lowerUnbounded(allocator, BIGINT.getType()))); assertFalse(range.includes(Marker.exactly(allocator, BIGINT.getType(), 0L))); assertTrue(range.includes(Marker.exactly(allocator, BIGINT.getType(), 1L))); assertTrue(range.includes(Marker.exactly(allocator, BIGINT.getType(), 2L))); assertFalse(range.includes(Marker.exactly(allocator, BIGINT.getType(), 3L))); assertFalse(range.includes(new LiteralValueMarker(0L, BIGINT.getType()))); assertTrue(range.includes(new LiteralValueMarker(1L, BIGINT.getType()))); assertTrue(range.includes(new LiteralValueMarker(2L, BIGINT.getType()))); assertFalse(range.includes(new LiteralValueMarker(3L, BIGINT.getType()))); assertFalse(range.includes(Marker.upperUnbounded(allocator, BIGINT.getType()))); }