/* *------------------------------------------------------------------------------ * Copyright (C) 2014-2015 University of Dundee. All rights reserved. * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *------------------------------------------------------------------------------ */ package omeis.providers.re.utests; import java.nio.ByteBuffer; import java.util.List; import ome.api.IPixels; import ome.io.nio.PixelBuffer; import ome.logic.RenderingSettingsImpl; import ome.model.core.Pixels; import ome.model.display.RenderingDef; import ome.model.enums.PixelsType; import ome.model.enums.RenderingModel; import ome.util.PixelData; import omeis.providers.re.Renderer; import omeis.providers.re.data.PlaneDef; import omeis.providers.re.quantum.Quantization_float; import omeis.providers.re.quantum.QuantumFactory; import omeis.providers.re.quantum.QuantumStrategy; import org.perf4j.LoggingStopWatch; import org.perf4j.StopWatch; import org.testng.annotations.Test; public class TestStandardFloatRenderer extends BaseRenderingTest { @Override protected QuantumFactory createQuantumFactory() { TestQuantumFactory qf = new TestQuantumFactory(); qf.setStrategy(new Quantization_float(settings.getQuantization(), pixels)); return qf; } @Override protected int getSizeX() { return 2; } @Override protected int getSizeY() { return 4; } @Override protected int getBytesPerPixel() { return 4; } @Override protected byte[] getPlane() { int n = 16; Float[] output = new Float[16]; for (int i = 0; i < n/2; i++) { output[i+n/2] = new Float(Integer.MAX_VALUE); } for (int i = 0; i < n/2; i++) { output[i] = 0.0f; } ByteBuffer buffer = ByteBuffer.allocate(4 * output.length); for (float value : output){ buffer.putFloat(value); } return buffer.array(); } @Override protected PixelsType getPixelsType() { PixelsType pixelsType = new PixelsType(); pixelsType.setValue("float"); pixelsType.setBitSize(32); return pixelsType; } @Test public void testPixelValues() throws Exception { QuantumStrategy qs = quantumFactory.getStrategy( settings.getQuantization(), pixels); int n = data.size(); for (int i = 0; i < n/2; i++) { assertEquals(0.0, data.getPixelValue(i)); } for (int i = 0; i < n/2; i++) { assertEquals(new Float(qs.getPixelsTypeMax()), new Float(data.getPixelValue(i+n/2))); } try { assertEquals(0.0, data.getPixelValue(n)); fail("Should have thrown an IndexOutOfBoundsException."); } catch (IndexOutOfBoundsException e) { } } @Test public void testPixelValuesRange() throws Exception { QuantumStrategy qs = quantumFactory.getStrategy( settings.getQuantization(), pixels); assertTrue(Integer.MIN_VALUE == qs.getPixelsTypeMin()); assertTrue(Integer.MAX_VALUE == qs.getPixelsTypeMax()); } @Test(timeOut=30000) public void testRenderAsPackedInt() throws Exception { PlaneDef def = new PlaneDef(PlaneDef.XY, 0); for (int i = 0; i < RUN_COUNT; i++) { StopWatch stopWatch = new LoggingStopWatch("testRendererAsPackedInt"); renderer.renderAsPackedInt(def, pixelBuffer); stopWatch.stop(); } } public void testRenderLargeRange() throws Exception { PixelsType pixelsType = getPixelsType(); byte[] plane = getLargeRangePlane(); data = new PixelData(pixelsType.getValue(), ByteBuffer.wrap(plane)); Pixels pixels = createDummyPixels(pixelsType, data); TestPixelsService pixelsService = new TestPixelsService(pixels); pixelsService.setDummyPlane(plane); IPixels pixelsMetadataService = new TestPixelsMetadataService(); RenderingSettingsImpl settingsService = new RenderingSettingsImpl(); settingsService.setPixelsMetadata(pixelsMetadataService); settingsService.setPixelsData(pixelsService); RenderingDef settings = settingsService.createNewRenderingDef(pixels); settingsService.resetDefaultsNoSave(settings, pixels); PixelBuffer pixelBuffer = pixelsService.getPixelBuffer(pixels, false); List<RenderingModel> renderingModels = pixelsMetadataService.getAllEnumerations(RenderingModel.class); QuantumFactory quantumFactory = createQuantumFactory(); Renderer renderer = new Renderer(quantumFactory, renderingModels, pixels, settings, pixelBuffer); PlaneDef def = new PlaneDef(PlaneDef.XY, 0); StopWatch stopWatch = new LoggingStopWatch("testRenderLargeRange"); renderer.renderAsPackedInt(def, pixelBuffer); stopWatch.stop(); } private byte[] getLargeRangePlane() { int n = 100000000; Float[] output = new Float[n]; for (int i = 0; i < output.length; i++) { output[i] = new Float(Integer.MIN_VALUE+i); } ByteBuffer buffer = ByteBuffer.allocate(4 * output.length); for (float value : output){ buffer.putFloat(value); } return buffer.array(); } }