### Question:
PointSpriteGeometry extends PointGeometry implements ImageProvidingGeometry<PointSpriteGeometry> { @Override public PointSpriteGeometry derive(BaseRenderProperties renderProperties, Constraints constraints) throws ClassCastException { return new PointSpriteGeometry(createBuilder(), (PointRenderProperties)renderProperties, constraints); } PointSpriteGeometry(Builder<?> builder, PointRenderProperties renderProperties, Constraints constraints); @Override void addObserver(io.opensphere.core.geometry.ImageProvidingGeometry.Observer<PointSpriteGeometry> observer); @Override PointSpriteGeometry clone(); @Override Builder<? extends Position> createBuilder(); @Override PointSpriteGeometry derive(BaseRenderProperties renderProperties, Constraints constraints); @Override DataRequestAgent getDataRequestAgent(); @Override ImageManager getImageManager(); @Override void removeObserver(io.opensphere.core.geometry.ImageProvidingGeometry.Observer<PointSpriteGeometry> observer); @Override final void requestImageData(); @Override final void requestImageData(Comparator<? super PointSpriteGeometry> comparator, TimeBudget timeBudget); @Override boolean sharesImage(); boolean isProjectionSensitive();  }### Answer:
@Test public void testDerive() { PointSpriteGeometry.Builder<GeographicPosition> builder = new PointSpriteGeometry.Builder<GeographicPosition>(); builder.setDataModelId(3423L); GeographicPosition position = new GeographicPosition(LatLonAlt.createFromDegrees(23., 56.)); builder.setPosition(position); builder.setImageManager(new ImageManager(null, null)); builder.setRapidUpdate(true); PointRenderProperties renderProperties1 = new DefaultPointRenderProperties(65763, false, true, false); TimeConstraint timeConstraint = TimeConstraint.getTimeConstraint(TimeSpan.get(10L, 20L)); Constraints constraints1 = new Constraints(timeConstraint); PointSpriteGeometry geom = new PointSpriteGeometry(builder, renderProperties1, constraints1); AbstractRenderableGeometry absGeom = geom; ColorRenderProperties renderProperties2 = renderProperties1.clone(); Constraints constraints2 = new Constraints(timeConstraint); AbstractRenderableGeometry derived = absGeom.derive(renderProperties2, constraints2); Assert.assertNotSame(geom, derived); Assert.assertEquals(geom.getDataModelId(), derived.getDataModelId()); Assert.assertEquals(geom.getImageManager(), ((PointSpriteGeometry)derived).getImageManager()); Assert.assertEquals(geom.isRapidUpdate(), derived.isRapidUpdate()); Assert.assertNotSame(geom.getRenderProperties(), derived.getRenderProperties()); Assert.assertSame(renderProperties2, derived.getRenderProperties()); Assert.assertNotSame(geom.getConstraints(), derived.getConstraints()); Assert.assertSame(constraints2, derived.getConstraints()); }