### Question:
MirrorableModel extends FeatureModel implements Mirrorable, Recyclable { @Override public void mirror(Mirror state) { Check.notNull(state); nextState = state; updater = this::updateMirror; } MirrorableModel(Services services, Setup setup); @Override void mirror(Mirror state); @Override void update(double extrp); @Override Mirror getMirror(); @Override boolean is(Mirror mirror); @Override void recycle();  }### Answer:
@Test void testMirror() { final MirrorableModel mirrorable = new MirrorableModel(services, setup); assertEquals(Mirror.NONE, mirrorable.getMirror()); mirrorable.recycle(); assertEquals(Mirror.NONE, mirrorable.getMirror()); assertTrue(mirrorable.is(Mirror.NONE)); mirrorable.update(1.0); assertEquals(Mirror.NONE, mirrorable.getMirror()); mirrorable.mirror(Mirror.HORIZONTAL); assertEquals(Mirror.NONE, mirrorable.getMirror()); mirrorable.update(1.0); assertEquals(Mirror.HORIZONTAL, mirrorable.getMirror()); assertTrue(mirrorable.is(Mirror.HORIZONTAL)); mirrorable.mirror(Mirror.VERTICAL); assertEquals(Mirror.HORIZONTAL, mirrorable.getMirror()); mirrorable.update(1.0); assertEquals(Mirror.VERTICAL, mirrorable.getMirror()); assertTrue(mirrorable.is(Mirror.VERTICAL)); assertFalse(mirrorable.is(Mirror.HORIZONTAL)); }