This is an automated email from the ASF dual-hosted git repository.

alexismanin pushed a commit to branch fix/geotiff-flaky-test
in repository https://gitbox.apache.org/repos/asf/sis.git

commit ad33ef9dd7461127bc8253038088b4604c65470d
Author: Alexis Manin <[email protected]>
AuthorDate: Thu May 21 10:58:22 2026 +0200

    chore(Feature): add a test to verify that image reformatting properly 
retile given image.
---
 .../org/apache/sis/image/ImageProcessorTest.java   | 42 ++++++++++++++++++++++
 1 file changed, 42 insertions(+)

diff --git 
a/endorsed/src/org.apache.sis.feature/test/org/apache/sis/image/ImageProcessorTest.java
 
b/endorsed/src/org.apache.sis.feature/test/org/apache/sis/image/ImageProcessorTest.java
index bf2fa4c1fe..f817f65f40 100644
--- 
a/endorsed/src/org.apache.sis.feature/test/org/apache/sis/image/ImageProcessorTest.java
+++ 
b/endorsed/src/org.apache.sis.feature/test/org/apache/sis/image/ImageProcessorTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.sis.image;
 
+import java.awt.Dimension;
+import java.awt.image.SampleModel;
 import java.util.Map;
 import java.util.stream.IntStream;
 import java.awt.Shape;
@@ -27,6 +29,8 @@ import org.opengis.referencing.operation.MathTransform;
 
 // Test dependencies
 import org.junit.jupiter.api.Test;
+
+import static org.apache.sis.feature.Assertions.assertPixelsEqual;
 import static org.junit.jupiter.api.Assertions.*;
 import org.apache.sis.image.processing.isoline.IsolinesTest;
 import org.apache.sis.test.TestCase;
@@ -110,4 +114,42 @@ public final class ImageProcessorTest extends TestCase {
             
IsolinesTest.verifyIsolineFromMultiCells(assertSingleton(r.values()));
         } while ((parallel = !parallel) == true);
     }
+
+    /**
+     * Verify that {@link ImageProcessor#reformat(RenderedImage, SampleModel) 
reformat} properly adapt tile size
+     * according to given parameters.
+     */
+    @Test
+    public void changeTileSize() {
+        changeTileSize(12, 12, 4, 2);
+        changeTileSize(64, 64, 32, 32);
+        changeTileSize(50, 50, 5, 5);
+    }
+
+    private void changeTileSize(int sourceImageWidth, int sourceImageHeight, 
int targetTileWidth, int targetTileHeight) {
+        // Fill source image
+        final var image = new BufferedImage(sourceImageWidth, 
sourceImageHeight, BufferedImage.TYPE_BYTE_GRAY);
+        final var canvas = image.getRaster();
+        for (int y = 0 ; y < image.getHeight() ; y++) {
+            for (int x = 0 ; x < image.getWidth() ; x++) {
+                canvas.setSample(x, y, 0, x*y);
+            }
+        }
+
+        // Prepare target image layout
+        final var tileModel = 
image.getSampleModel().createCompatibleSampleModel(targetTileWidth, 
targetTileHeight);
+        final var preferredTileSize = new Dimension(tileModel.getWidth(), 
tileModel.getHeight());
+        processor.setImageLayout(new ImageLayout(tileModel, preferredTileSize, 
true, false, true, null));
+
+        // Execute and verify twice: sequential then parallel
+        boolean parallel = false;
+        final var imageBounds = new Rectangle(0, 0, image.getWidth(), 
image.getHeight());
+        do {
+            processor.setExecutionMode(parallel ? 
ImageProcessor.Mode.SEQUENTIAL : ImageProcessor.Mode.PARALLEL);
+            final RenderedImage reformatted = processor.reformat(image, null);
+            assertPixelsEqual(image, imageBounds, reformatted, imageBounds);
+            assertEquals(tileModel.getWidth(), reformatted.getTileWidth(), 
"Reformatted image tile width");
+            assertEquals(tileModel.getHeight(), reformatted.getTileHeight(), 
"Reformatted image tile height");
+        } while ((parallel = !parallel) == true);
+    }
 }

Reply via email to