public inbox for mauve-patches@sourceware.org
 help / color / mirror / Atom feed
* FYI: LookupOp tests
@ 2006-09-05 15:57 Francis Kung
  2006-09-05 16:04 ` Francis Kung
  0 siblings, 1 reply; 3+ messages in thread
From: Francis Kung @ 2006-09-05 15:57 UTC (permalink / raw)
  To: mauve-patches

[-- Attachment #1: Type: text/plain, Size: 406 bytes --]

Hi,

This patch (committed) adds a number of tests for the LookupOp and
*LookupTable classes.

Some tests are currently commented out, as there's a nitty-gritty type
of incompatibility between Sun's implementation and Classpath and I
don't know if it's something we'll fix (storing alpha info as band #3
instead of #4 for ARGB)... I'm going to bring it up on the Classpath
patches list.

Cheers,
Francis



[-- Attachment #2: LookupOp.diff --]
[-- Type: text/x-patch, Size: 51141 bytes --]

Index: gnu/testlet/java/awt/image/LookupOp/createCompatibleDestRaster.java
===================================================================
RCS file: /cvs/mauve/mauve/gnu/testlet/java/awt/image/LookupOp/createCompatibleDestRaster.java,v
retrieving revision 1.1
diff -u -r1.1 createCompatibleDestRaster.java
--- gnu/testlet/java/awt/image/LookupOp/createCompatibleDestRaster.java	18 Jul 2006 16:56:39 -0000	1.1
+++ gnu/testlet/java/awt/image/LookupOp/createCompatibleDestRaster.java	5 Sep 2006 15:52:24 -0000
@@ -27,6 +27,7 @@
 import gnu.testlet.TestHarness;
 import gnu.testlet.Testlet;
 
+import java.awt.Point;
 import java.awt.image.ByteLookupTable;
 import java.awt.image.DataBuffer;
 import java.awt.image.LookupOp;
@@ -47,6 +48,9 @@
     harness.check(dest.getHeight(), 20);
     harness.check(dest.getNumBands(), 1);
     harness.check(dest.getSampleModel() instanceof MultiPixelPackedSampleModel);
+    harness.check(dest.getTransferType(), raster.getTransferType());
+    harness.check(dest.getDataBuffer().getDataType(), raster.getDataBuffer().getDataType());
+    harness.check(dest.getNumDataElements(), raster.getNumDataElements());
   
     // try null argument
     boolean pass = false;
@@ -59,5 +63,21 @@
       pass = true;
     }
     harness.check(pass);
+    
+    // Try a different type
+    raster = Raster.createBandedRaster(DataBuffer.TYPE_BYTE, 25, 40, 3, new Point(5, 5));
+    Raster dst = op.createCompatibleDestRaster(raster);
+    harness.check(dst.getNumBands(), raster.getNumBands());
+    harness.check(dst.getTransferType(), raster.getTransferType());
+    harness.check(dst.getDataBuffer().getDataType(), raster.getDataBuffer().getDataType());
+    harness.check(dst.getNumDataElements(), raster.getNumDataElements());
+    
+    // Try a different number of bands
+    raster = Raster.createBandedRaster(DataBuffer.TYPE_INT, 25, 40, 5, new Point(5, 5));
+    dst = op.createCompatibleDestRaster(raster);
+    harness.check(dst.getNumBands(), raster.getNumBands());
+    harness.check(dst.getTransferType(), raster.getTransferType());
+    harness.check(dst.getDataBuffer().getDataType(), raster.getDataBuffer().getDataType());
+    harness.check(dst.getNumDataElements(), raster.getNumDataElements());
   }
 }
Index: gnu/testlet/java/awt/image/ShortLookupTable/lookupPixel.java
===================================================================
RCS file: /cvs/mauve/mauve/gnu/testlet/java/awt/image/ShortLookupTable/lookupPixel.java,v
retrieving revision 1.2
diff -u -r1.2 lookupPixel.java
--- gnu/testlet/java/awt/image/ShortLookupTable/lookupPixel.java	13 Oct 2004 19:17:04 -0000	1.2
+++ gnu/testlet/java/awt/image/ShortLookupTable/lookupPixel.java	5 Sep 2006 15:52:24 -0000
@@ -39,6 +39,7 @@
   {
     testInt(harness);
     testShort(harness);
+    testFailure(harness);
   }
 
   private void testInt(TestHarness harness) 
@@ -235,5 +236,36 @@
     }
   }
 
+  // Test failures, ie, if the requested pixel is not in the table.
+  // It should throw array index out of bounds exceptions.
+  private void testFailure(TestHarness harness)
+  {
+    harness.checkPoint("not in table");
+    short[] data = {105, 104, 103, 102, 101, 100};
+    ShortLookupTable t = new ShortLookupTable(100, data);
+    
+    try
+    {
+      int[] src = new int[] {120};
+      t.lookupPixel(src, null);
+      harness.check(false);
+    }
+    catch (ArrayIndexOutOfBoundsException ex)
+    {
+      harness.check(true);
+    }
+    
+    try
+    {
+      short[] src = new short[] {120};
+      t.lookupPixel(src, null);
+      harness.check(false);
+    }
+    catch (ArrayIndexOutOfBoundsException ex)
+    {
+      harness.check(true);
+    }
+    
+  }
 }
 
Index: gnu/testlet/java/awt/image/ByteLookupTable/lookupPixel.java
===================================================================
RCS file: /cvs/mauve/mauve/gnu/testlet/java/awt/image/ByteLookupTable/lookupPixel.java,v
retrieving revision 1.2
diff -u -r1.2 lookupPixel.java
--- gnu/testlet/java/awt/image/ByteLookupTable/lookupPixel.java	13 Oct 2004 19:17:03 -0000	1.2
+++ gnu/testlet/java/awt/image/ByteLookupTable/lookupPixel.java	5 Sep 2006 15:52:23 -0000
@@ -39,6 +39,7 @@
   {
     testInt(harness);
     testByte(harness);
+    testFailure(harness);
   }
 
   private void testInt(TestHarness harness) 
@@ -234,6 +235,38 @@
         harness.check(true);
     }
   }
+  
+  // Test failures, ie, if the requested pixel is not in the table.
+  // It should throw array index out of bounds exceptions.
+  private void testFailure(TestHarness harness)
+  {
+    harness.checkPoint("not in table");
+    byte[] data = {105, 104, 103, 102, 101, 100};
+    ByteLookupTable t = new ByteLookupTable(100, data);
+    
+    try
+    {
+      int[] src = new int[] {100, 102, 101, 120};
+      t.lookupPixel(src, null);
+      harness.check(false);
+    }
+    catch (ArrayIndexOutOfBoundsException ex)
+    {
+      harness.check(true);
+    }
+    
+    try
+    {
+      byte[] src = new byte[] {120};
+      t.lookupPixel(src, null);
+      harness.check(false);
+    }
+    catch (ArrayIndexOutOfBoundsException ex)
+    {
+      harness.check(true);
+    }
+   
+  }
 
 }
 
Index: gnu/testlet/java/awt/image/LookupOp/filterImage.java
===================================================================
RCS file: gnu/testlet/java/awt/image/LookupOp/filterImage.java
diff -N gnu/testlet/java/awt/image/LookupOp/filterImage.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ gnu/testlet/java/awt/image/LookupOp/filterImage.java	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,696 @@
+/* filterImage.java -- some checks for the filter(Image) method of the
+              ConvolveOp class.
+   Copyright (C) 2006 Francis Kung <fkung@redhat.com>
+This file is part of Mauve.
+
+Mauve 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, or (at your option)
+any later version.
+
+Mauve 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 Mauve; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+*/
+
+// Tags: JDK1.2
+
+package gnu.testlet.java.awt.image.LookupOp;
+
+import gnu.testlet.TestHarness;
+import gnu.testlet.Testlet;
+
+import java.awt.image.BufferedImage;
+import java.awt.image.ByteLookupTable;
+import java.awt.image.ConvolveOp;
+import java.awt.image.LookupOp;
+import java.awt.image.ShortLookupTable;
+import java.awt.image.WritableRaster;
+
+/**
+ * Checks the filter(BufferedImage) method in the {@link ConvolveOp} class.
+ */
+public class filterImage implements Testlet
+{
+
+  /**
+   * Runs the test using the specified harness.
+   * 
+   * @param harness  the test harness (<code>null</code> not permitted). 
+   */
+  public void test(TestHarness harness)      
+  {
+    testDefaults(harness);
+    
+    // Test lookup with only one lookup array: all colour components, but not
+    // alpha component, should be operated on
+    testOneLookup(harness, false);
+    testOneLookup(harness, true);
+    
+    // Test lookup with num lookup arrays == num colour components, so alpha
+    // component should be left alone
+    testColourLookup(harness, false);
+    testColourLookup(harness, true);
+    
+    // Test lookup with num lookup arrays == num components including alpha
+    testAllLookup(harness, false);
+    testAllLookup(harness, true);
+    
+    // Test behaviour when pixel value is not defined in lookup table
+    testUndefined(harness);
+  }
+  
+  private void testDefaults(TestHarness harness)
+  {
+    harness.checkPoint("testDefaults");
+    
+    // Create an image to work on
+    BufferedImage img = new BufferedImage(20, 20, BufferedImage.TYPE_USHORT_GRAY);
+    
+    byte[] bytes = new byte[] {(byte) 0xAA, (byte) 0xBB};
+    ByteLookupTable t = new ByteLookupTable(0, bytes);
+    LookupOp op = new LookupOp(t, null);
+    
+    // Simple tests
+    BufferedImage dst = op.filter(img, null);
+    harness.check(dst.getType(), op.createCompatibleDestImage(img, null).getType());
+    
+    dst = new BufferedImage(20, 20, BufferedImage.TYPE_USHORT_GRAY);
+    try
+    {
+      dst = op.filter(img, dst);
+      harness.check(true);
+    }
+    catch (IllegalArgumentException ex)
+    {
+      harness.check(false);
+    }
+    
+    // Src and dst images can be the same
+    try
+    {
+      op.filter(img, img);
+      harness.check(true);
+    }
+    catch (IllegalArgumentException e)
+    {
+      harness.check(false);
+    }
+    finally
+    {
+      // Reset image for next test
+      img = new BufferedImage(20, 20, BufferedImage.TYPE_USHORT_GRAY);
+    }
+    
+    // Src and dst are different sizes - not allowed
+    dst = new BufferedImage(30, 40, BufferedImage.TYPE_USHORT_GRAY);
+    try
+    {
+      op.filter(img, dst);
+      harness.check(false);
+    }
+    catch (IllegalArgumentException e)
+    {
+      harness.check(true);
+    }
+    
+    // Src and dst have different tpyes (allowed)
+    dst = new BufferedImage(20, 20, BufferedImage.TYPE_BYTE_GRAY);
+    try
+    {
+      op.filter(img, dst);
+      harness.check(true);
+    }
+    catch (IllegalArgumentException e)
+    {
+      harness.check(false);
+    }
+    
+    // src and dst can even have different number of bands
+    dst = new BufferedImage(20, 20, BufferedImage.TYPE_INT_ARGB);
+    try
+    {
+      op.filter(img, dst);
+      harness.check(true);
+      harness.check(img.getType(), BufferedImage.TYPE_USHORT_GRAY);
+      harness.check(dst.getType(), BufferedImage.TYPE_INT_ARGB);
+    }
+    catch (IllegalArgumentException ex)
+    {
+      harness.check(false);
+    }
+  }
+  
+  private void testOneLookup(TestHarness harness, boolean premultiply)
+  {
+    if (premultiply)
+      harness.checkPoint("testOneLookup with premultiply");
+    else
+      harness.checkPoint("testOneLookup without premultiply");
+    
+    // Create an image to work on
+    BufferedImage img;
+    if (premultiply)
+      img = new BufferedImage(5, 5, BufferedImage.TYPE_INT_ARGB_PRE);
+    else
+      img = new BufferedImage(5, 5, BufferedImage.TYPE_INT_ARGB);
+    createImage(img);
+    
+    byte[] bytes = new byte[] {12, 23, 14, 35, 48, 2};
+    ByteLookupTable t = new ByteLookupTable(0, bytes);
+    LookupOp op = new LookupOp(t, null);
+    
+    BufferedImage dst = new BufferedImage(5, 5, BufferedImage.TYPE_INT_ARGB);
+    dst = op.filter(img, dst);
+    WritableRaster dest = dst.getRaster();
+    
+    harness.check(img.isAlphaPremultiplied(), premultiply);
+    harness.check(dst.isAlphaPremultiplied(), false);
+    
+    harness.check(dest.getSample(0, 0, 0), 23);
+    harness.check(dest.getSample(1, 0, 0), 35);
+    harness.check(dest.getSample(2, 0, 0), 23);
+    harness.check(dest.getSample(3, 0, 0), 35);
+    harness.check(dest.getSample(4, 0, 0), 23);
+    harness.check(dest.getSample(0, 1, 0), 48);
+    harness.check(dest.getSample(1, 1, 0), 14);
+    harness.check(dest.getSample(2, 1, 0), 48);
+    harness.check(dest.getSample(3, 1, 0), 14);
+    harness.check(dest.getSample(4, 1, 0), 48);
+    harness.check(dest.getSample(0, 2, 0), 23);
+    harness.check(dest.getSample(1, 2, 0), 35);
+    harness.check(dest.getSample(2, 2, 0), 23);
+    harness.check(dest.getSample(3, 2, 0), 35);
+    harness.check(dest.getSample(4, 2, 0), 23);
+    harness.check(dest.getSample(0, 3, 0), 48);
+    harness.check(dest.getSample(1, 3, 0), 14);
+    harness.check(dest.getSample(2, 3, 0), 48);
+    harness.check(dest.getSample(3, 3, 0), 14);
+    harness.check(dest.getSample(4, 3, 0), 48);
+    harness.check(dest.getSample(0, 4, 0), 23);
+    harness.check(dest.getSample(1, 4, 0), 35);
+    harness.check(dest.getSample(2, 4, 0), 23);
+    harness.check(dest.getSample(3, 4, 0), 35);
+    harness.check(dest.getSample(4, 4, 0), 23);
+    
+    harness.check(dest.getSample(0, 0, 1), 12);
+    harness.check(dest.getSample(1, 0, 1), 48);
+    harness.check(dest.getSample(2, 0, 1), 12);
+    harness.check(dest.getSample(3, 0, 1), 48);
+    harness.check(dest.getSample(4, 0, 1), 12);
+    harness.check(dest.getSample(0, 1, 1), 35);
+    harness.check(dest.getSample(1, 1, 1), 23);
+    harness.check(dest.getSample(2, 1, 1), 35);
+    harness.check(dest.getSample(3, 1, 1), 23);
+    harness.check(dest.getSample(4, 1, 1), 35);
+    harness.check(dest.getSample(0, 2, 1), 12);
+    harness.check(dest.getSample(1, 2, 1), 48);
+    harness.check(dest.getSample(2, 2, 1), 12);
+    harness.check(dest.getSample(3, 2, 1), 48);
+    harness.check(dest.getSample(4, 2, 1), 12);
+    harness.check(dest.getSample(0, 3, 1), 35);
+    harness.check(dest.getSample(1, 3, 1), 23);
+    harness.check(dest.getSample(2, 3, 1), 35);
+    harness.check(dest.getSample(3, 3, 1), 23);
+    harness.check(dest.getSample(4, 3, 1), 35);
+    harness.check(dest.getSample(0, 4, 1), 12);
+    harness.check(dest.getSample(1, 4, 1), 48);
+    harness.check(dest.getSample(2, 4, 1), 12);
+    harness.check(dest.getSample(3, 4, 1), 48);
+    harness.check(dest.getSample(4, 4, 1), 12);
+    
+    // Sun's implementation uses RGAB (alpha as the 3rd band), as opposed to
+    // our RGBA, so these tests will fail... however these might not be worth
+    // changing, so left them commented out for now.
+/*    
+    harness.check(dest.getSample(0, 0, 2), 2);
+    harness.check(dest.getSample(1, 0, 2), 3);
+    harness.check(dest.getSample(2, 0, 2), 2);
+    harness.check(dest.getSample(3, 0, 2), 3);
+    harness.check(dest.getSample(4, 0, 2), 2);
+    harness.check(dest.getSample(0, 1, 2), 4);
+    harness.check(dest.getSample(1, 1, 2), 2);
+    harness.check(dest.getSample(2, 1, 2), 4);
+    harness.check(dest.getSample(3, 1, 2), 2);
+    harness.check(dest.getSample(4, 1, 2), 4);
+    harness.check(dest.getSample(0, 2, 2), 2);
+    harness.check(dest.getSample(1, 2, 2), 3);
+    harness.check(dest.getSample(2, 2, 2), 2);
+    harness.check(dest.getSample(3, 2, 2), 3);
+    harness.check(dest.getSample(4, 2, 2), 2);
+    harness.check(dest.getSample(0, 3, 2), 4);
+    harness.check(dest.getSample(1, 3, 2), 2);
+    harness.check(dest.getSample(2, 3, 2), 4);
+    harness.check(dest.getSample(3, 3, 2), 2);
+    harness.check(dest.getSample(4, 3, 2), 4);
+    harness.check(dest.getSample(0, 4, 2), 2);
+    harness.check(dest.getSample(1, 4, 2), 3);
+    harness.check(dest.getSample(2, 4, 2), 2);
+    harness.check(dest.getSample(3, 4, 2), 3);
+    harness.check(dest.getSample(4, 4, 2), 2);
+    
+    harness.check(dest.getSample(0, 0, 3), 12);
+    harness.check(dest.getSample(1, 0, 3), 48);
+    harness.check(dest.getSample(2, 0, 3), 12);
+    harness.check(dest.getSample(3, 0, 3), 48);
+    harness.check(dest.getSample(4, 0, 3), 12);
+    harness.check(dest.getSample(0, 1, 3), 35);
+    harness.check(dest.getSample(1, 1, 3), 23);
+    harness.check(dest.getSample(2, 1, 3), 35);
+    harness.check(dest.getSample(3, 1, 3), 23);
+    harness.check(dest.getSample(4, 1, 3), 35);
+    harness.check(dest.getSample(0, 2, 3), 12);
+    harness.check(dest.getSample(1, 2, 3), 48);
+    harness.check(dest.getSample(2, 2, 3), 12);
+    harness.check(dest.getSample(3, 2, 3), 48);
+    harness.check(dest.getSample(4, 2, 3), 12);
+    harness.check(dest.getSample(0, 3, 3), 35);
+    harness.check(dest.getSample(1, 3, 3), 23);
+    harness.check(dest.getSample(2, 3, 3), 35);
+    harness.check(dest.getSample(3, 3, 3), 23);
+    harness.check(dest.getSample(4, 3, 3), 35);
+    harness.check(dest.getSample(0, 4, 3), 12);
+    harness.check(dest.getSample(1, 4, 3), 48);
+    harness.check(dest.getSample(2, 4, 3), 12);
+    harness.check(dest.getSample(3, 4, 3), 48);
+    harness.check(dest.getSample(4, 4, 3), 12);
+    */
+  }
+  
+  private void testColourLookup(TestHarness harness, boolean premultiply)
+  {
+    if (premultiply)
+      harness.checkPoint("testColourLookup with premultiply");
+    else
+      harness.checkPoint("testColourLookup without premultiply");
+    
+    // Create an image to work on
+    BufferedImage img;
+    if (premultiply)
+      img = new BufferedImage(5, 5, BufferedImage.TYPE_INT_ARGB_PRE);
+    else
+      img = new BufferedImage(5, 5, BufferedImage.TYPE_INT_ARGB);
+    createImage(img);
+    
+    short[][] lutarray = new short[][] {{12, 23, 14, 35, 48, 2},
+                                        {112, 123, 114, 135, 148, 102},
+                                        {212, 223, 214, 235, 248, 202}
+                                       };
+    
+    ShortLookupTable t = new ShortLookupTable(0, lutarray);
+    LookupOp op = new LookupOp(t, null);
+    BufferedImage dst = new BufferedImage(5, 5, BufferedImage.TYPE_INT_ARGB);
+
+    /* This causes Sun to throw an exception...
+     * 
+     * java.lang.IllegalArgumentException: Number of channels in the src (4)
+     * does not match number of channels in the destination (2)
+     * 
+     * I'm pretty sure it's a bug, but it's not one that's worth mimicing.
+     * This test will not run on Sun.
+     */ 
+    try
+    {
+      dst = op.filter(img, dst);
+      WritableRaster dest = dst.getRaster();
+      
+      harness.check(img.isAlphaPremultiplied(), premultiply);
+      harness.check(dst.isAlphaPremultiplied(), false);
+      
+      harness.check(dest.getSample(0, 0, 0), 23);
+      harness.check(dest.getSample(1, 0, 0), 35);
+      harness.check(dest.getSample(2, 0, 0), 23);
+      harness.check(dest.getSample(3, 0, 0), 35);
+      harness.check(dest.getSample(4, 0, 0), 23);
+      harness.check(dest.getSample(0, 1, 0), 48);
+      harness.check(dest.getSample(1, 1, 0), 14);
+      harness.check(dest.getSample(2, 1, 0), 48);
+      harness.check(dest.getSample(3, 1, 0), 14);
+      harness.check(dest.getSample(4, 1, 0), 48);
+      harness.check(dest.getSample(0, 2, 0), 23);
+      harness.check(dest.getSample(1, 2, 0), 35);
+      harness.check(dest.getSample(2, 2, 0), 23);
+      harness.check(dest.getSample(3, 2, 0), 35);
+      harness.check(dest.getSample(4, 2, 0), 23);
+      harness.check(dest.getSample(0, 3, 0), 48);
+      harness.check(dest.getSample(1, 3, 0), 14);
+      harness.check(dest.getSample(2, 3, 0), 48);
+      harness.check(dest.getSample(3, 3, 0), 14);
+      harness.check(dest.getSample(4, 3, 0), 48);
+      harness.check(dest.getSample(0, 4, 0), 23);
+      harness.check(dest.getSample(1, 4, 0), 35);
+      harness.check(dest.getSample(2, 4, 0), 23);
+      harness.check(dest.getSample(3, 4, 0), 35);
+      harness.check(dest.getSample(4, 4, 0), 23);
+      
+      harness.check(dest.getSample(0, 0, 1), 112);
+      harness.check(dest.getSample(1, 0, 1), 148);
+      harness.check(dest.getSample(2, 0, 1), 112);
+      harness.check(dest.getSample(3, 0, 1), 148);
+      harness.check(dest.getSample(4, 0, 1), 112);
+      harness.check(dest.getSample(0, 1, 1), 135);
+      harness.check(dest.getSample(1, 1, 1), 123);
+      harness.check(dest.getSample(2, 1, 1), 135);
+      harness.check(dest.getSample(3, 1, 1), 123);
+      harness.check(dest.getSample(4, 1, 1), 135);
+      harness.check(dest.getSample(0, 2, 1), 112);
+      harness.check(dest.getSample(1, 2, 1), 148);
+      harness.check(dest.getSample(2, 2, 1), 112);
+      harness.check(dest.getSample(3, 2, 1), 148);
+      harness.check(dest.getSample(4, 2, 1), 112);
+      harness.check(dest.getSample(0, 3, 1), 135);
+      harness.check(dest.getSample(1, 3, 1), 123);
+      harness.check(dest.getSample(2, 3, 1), 135);
+      harness.check(dest.getSample(3, 3, 1), 123);
+      harness.check(dest.getSample(4, 3, 1), 135);
+      harness.check(dest.getSample(0, 4, 1), 112);
+      harness.check(dest.getSample(1, 4, 1), 148);
+      harness.check(dest.getSample(2, 4, 1), 112);
+      harness.check(dest.getSample(3, 4, 1), 148);
+      harness.check(dest.getSample(4, 4, 1), 112);
+      
+      // Sun's implementation uses RGAB (alpha as the 3rd band), as opposed to
+      // our RGBA, so these tests will fail... however these might not be worth
+      // changing, so left them commented out for now.
+      /*
+      harness.check(dest.getSample(0, 0, 2), 2);
+      harness.check(dest.getSample(1, 0, 2), 3);
+      harness.check(dest.getSample(2, 0, 2), 2);
+      harness.check(dest.getSample(3, 0, 2), 3);
+      harness.check(dest.getSample(4, 0, 2), 2);
+      harness.check(dest.getSample(0, 1, 2), 4);
+      harness.check(dest.getSample(1, 1, 2), 2);
+      harness.check(dest.getSample(2, 1, 2), 4);
+      harness.check(dest.getSample(3, 1, 2), 2);
+      harness.check(dest.getSample(4, 1, 2), 4);
+      harness.check(dest.getSample(0, 2, 2), 2);
+      harness.check(dest.getSample(1, 2, 2), 3);
+      harness.check(dest.getSample(2, 2, 2), 2);
+      harness.check(dest.getSample(3, 2, 2), 3);
+      harness.check(dest.getSample(4, 2, 2), 2);
+      harness.check(dest.getSample(0, 3, 2), 4);
+      harness.check(dest.getSample(1, 3, 2), 2);
+      harness.check(dest.getSample(2, 3, 2), 4);
+      harness.check(dest.getSample(3, 3, 2), 2);
+      harness.check(dest.getSample(4, 3, 2), 4);
+      harness.check(dest.getSample(0, 4, 2), 2);
+      harness.check(dest.getSample(1, 4, 2), 3);
+      harness.check(dest.getSample(2, 4, 2), 2);
+      harness.check(dest.getSample(3, 4, 2), 3);
+      harness.check(dest.getSample(4, 4, 2), 2);
+      
+      harness.check(dest.getSample(0, 0, 3), 212);
+      harness.check(dest.getSample(1, 0, 3), 248);
+      harness.check(dest.getSample(2, 0, 3), 212);
+      harness.check(dest.getSample(3, 0, 3), 248);
+      harness.check(dest.getSample(4, 0, 3), 212);
+      harness.check(dest.getSample(0, 1, 3), 235);
+      harness.check(dest.getSample(1, 1, 3), 223);
+      harness.check(dest.getSample(2, 1, 3), 235);
+      harness.check(dest.getSample(3, 1, 3), 223);
+      harness.check(dest.getSample(4, 1, 3), 235);
+      harness.check(dest.getSample(0, 2, 3), 212);
+      harness.check(dest.getSample(1, 2, 3), 248);
+      harness.check(dest.getSample(2, 2, 3), 212);
+      harness.check(dest.getSample(3, 2, 3), 248);
+      harness.check(dest.getSample(4, 2, 3), 212);
+      harness.check(dest.getSample(0, 3, 3), 235);
+      harness.check(dest.getSample(1, 3, 3), 223);
+      harness.check(dest.getSample(2, 3, 3), 235);
+      harness.check(dest.getSample(3, 3, 3), 223);
+      harness.check(dest.getSample(4, 3, 3), 235);
+      harness.check(dest.getSample(0, 4, 3), 212);
+      harness.check(dest.getSample(1, 4, 3), 248);
+      harness.check(dest.getSample(2, 4, 3), 212);
+      harness.check(dest.getSample(3, 4, 3), 248);
+      harness.check(dest.getSample(4, 4, 3), 212);
+      */
+    }
+    catch (IllegalArgumentException ex)
+    {
+      harness.debug("Test did not run - this is expected on Sun due to a " +
+            "bug in their implementation, but this message should not show " +
+            "when testing Classpath.");
+    }
+  }
+  
+  private void testAllLookup(TestHarness harness, boolean premultiply)
+  {
+    if (premultiply)
+      harness.checkPoint("testAllLookup with premultiply");
+    else
+      harness.checkPoint("testAllLookup without premultiply");
+    
+    // Create an image to work on
+    BufferedImage img;
+    if (premultiply)
+      img = new BufferedImage(5, 5, BufferedImage.TYPE_INT_ARGB_PRE);
+    else
+      img = new BufferedImage(5, 5, BufferedImage.TYPE_INT_ARGB);
+    createImage(img);
+    
+    short[][] lutarray = new short[][] {{12, 23, 14, 35, 48, 2},
+                                        {112, 123, 114, 135, 148, 102},
+                                        {212, 223, 214, 235, 248, 202},
+                                        {62, 73, 64, 85, 98, 52}
+                                       };
+    
+    ShortLookupTable t = new ShortLookupTable(0, lutarray);
+    LookupOp op = new LookupOp(t, null);
+    
+    BufferedImage dst = new BufferedImage(5, 5, BufferedImage.TYPE_INT_ARGB);
+    dst = op.filter(img, dst);
+    WritableRaster dest = dst.getRaster();
+    
+    harness.check(img.isAlphaPremultiplied(), premultiply);
+    harness.check(dst.isAlphaPremultiplied(), false);
+    
+    harness.check(dest.getSample(0, 0, 0), 23);
+    harness.check(dest.getSample(1, 0, 0), 35);
+    harness.check(dest.getSample(2, 0, 0), 23);
+    harness.check(dest.getSample(3, 0, 0), 35);
+    harness.check(dest.getSample(4, 0, 0), 23);
+    harness.check(dest.getSample(0, 1, 0), 48);
+    harness.check(dest.getSample(1, 1, 0), 14);
+    harness.check(dest.getSample(2, 1, 0), 48);
+    harness.check(dest.getSample(3, 1, 0), 14);
+    harness.check(dest.getSample(4, 1, 0), 48);
+    harness.check(dest.getSample(0, 2, 0), 23);
+    harness.check(dest.getSample(1, 2, 0), 35);
+    harness.check(dest.getSample(2, 2, 0), 23);
+    harness.check(dest.getSample(3, 2, 0), 35);
+    harness.check(dest.getSample(4, 2, 0), 23);
+    harness.check(dest.getSample(0, 3, 0), 48);
+    harness.check(dest.getSample(1, 3, 0), 14);
+    harness.check(dest.getSample(2, 3, 0), 48);
+    harness.check(dest.getSample(3, 3, 0), 14);
+    harness.check(dest.getSample(4, 3, 0), 48);
+    harness.check(dest.getSample(0, 4, 0), 23);
+    harness.check(dest.getSample(1, 4, 0), 35);
+    harness.check(dest.getSample(2, 4, 0), 23);
+    harness.check(dest.getSample(3, 4, 0), 35);
+    harness.check(dest.getSample(4, 4, 0), 23);
+    
+    harness.check(dest.getSample(0, 0, 1), 112);
+    harness.check(dest.getSample(1, 0, 1), 148);
+    harness.check(dest.getSample(2, 0, 1), 112);
+    harness.check(dest.getSample(3, 0, 1), 148);
+    harness.check(dest.getSample(4, 0, 1), 112);
+    harness.check(dest.getSample(0, 1, 1), 135);
+    harness.check(dest.getSample(1, 1, 1), 123);
+    harness.check(dest.getSample(2, 1, 1), 135);
+    harness.check(dest.getSample(3, 1, 1), 123);
+    harness.check(dest.getSample(4, 1, 1), 135);
+    harness.check(dest.getSample(0, 2, 1), 112);
+    harness.check(dest.getSample(1, 2, 1), 148);
+    harness.check(dest.getSample(2, 2, 1), 112);
+    harness.check(dest.getSample(3, 2, 1), 148);
+    harness.check(dest.getSample(4, 2, 1), 112);
+    harness.check(dest.getSample(0, 3, 1), 135);
+    harness.check(dest.getSample(1, 3, 1), 123);
+    harness.check(dest.getSample(2, 3, 1), 135);
+    harness.check(dest.getSample(3, 3, 1), 123);
+    harness.check(dest.getSample(4, 3, 1), 135);
+    harness.check(dest.getSample(0, 4, 1), 112);
+    harness.check(dest.getSample(1, 4, 1), 148);
+    harness.check(dest.getSample(2, 4, 1), 112);
+    harness.check(dest.getSample(3, 4, 1), 148);
+    harness.check(dest.getSample(4, 4, 1), 112);
+    
+    harness.check(dest.getSample(0, 0, 2), 214);
+    harness.check(dest.getSample(1, 0, 2), 235);
+    harness.check(dest.getSample(2, 0, 2), 214);
+    harness.check(dest.getSample(3, 0, 2), 235);
+    harness.check(dest.getSample(4, 0, 2), 214);
+    harness.check(dest.getSample(0, 1, 2), 248);
+    harness.check(dest.getSample(1, 1, 2), 214);
+    harness.check(dest.getSample(2, 1, 2), 248);
+    harness.check(dest.getSample(3, 1, 2), 214);
+    harness.check(dest.getSample(4, 1, 2), 248);
+    harness.check(dest.getSample(0, 2, 2), 214);
+    harness.check(dest.getSample(1, 2, 2), 235);
+    harness.check(dest.getSample(2, 2, 2), 214);
+    harness.check(dest.getSample(3, 2, 2), 235);
+    harness.check(dest.getSample(4, 2, 2), 214);
+    harness.check(dest.getSample(0, 3, 2), 248);
+    harness.check(dest.getSample(1, 3, 2), 214);
+    harness.check(dest.getSample(2, 3, 2), 248);
+    harness.check(dest.getSample(3, 3, 2), 214);
+    harness.check(dest.getSample(4, 3, 2), 248);
+    harness.check(dest.getSample(0, 4, 2), 214);
+    harness.check(dest.getSample(1, 4, 2), 235);
+    harness.check(dest.getSample(2, 4, 2), 214);
+    harness.check(dest.getSample(3, 4, 2), 235);
+    harness.check(dest.getSample(4, 4, 2), 214);
+    
+    harness.check(dest.getSample(0, 0, 3), 62);
+    harness.check(dest.getSample(1, 0, 3), 98);
+    harness.check(dest.getSample(2, 0, 3), 62);
+    harness.check(dest.getSample(3, 0, 3), 98);
+    harness.check(dest.getSample(4, 0, 3), 62);
+    harness.check(dest.getSample(0, 1, 3), 85);
+    harness.check(dest.getSample(1, 1, 3), 73);
+    harness.check(dest.getSample(2, 1, 3), 85);
+    harness.check(dest.getSample(3, 1, 3), 73);
+    harness.check(dest.getSample(4, 1, 3), 85);
+    harness.check(dest.getSample(0, 2, 3), 62);
+    harness.check(dest.getSample(1, 2, 3), 98);
+    harness.check(dest.getSample(2, 2, 3), 62);
+    harness.check(dest.getSample(3, 2, 3), 98);
+    harness.check(dest.getSample(4, 2, 3), 62);
+    harness.check(dest.getSample(0, 3, 3), 85);
+    harness.check(dest.getSample(1, 3, 3), 73);
+    harness.check(dest.getSample(2, 3, 3), 85);
+    harness.check(dest.getSample(3, 3, 3), 73);
+    harness.check(dest.getSample(4, 3, 3), 85);
+    harness.check(dest.getSample(0, 4, 3), 62);
+    harness.check(dest.getSample(1, 4, 3), 98);
+    harness.check(dest.getSample(2, 4, 3), 62);
+    harness.check(dest.getSample(3, 4, 3), 98);
+    harness.check(dest.getSample(4, 4, 3), 62);
+  }
+
+  private void testUndefined(TestHarness harness)
+  {
+    harness.checkPoint("testUndefined");
+    
+    // Create an image to work on
+    BufferedImage img = new BufferedImage(5, 5, BufferedImage.TYPE_INT_ARGB);
+    WritableRaster r = img.getRaster();
+    r.setSample(1, 1, 0, 20);
+
+    // We get the ArrayIndexOutOfBoundsException that we would expect when
+    // using a ShortLookupTable...
+    short[] lutarray = new short[] {0, 1, 2, 3, 4, 5, 6, 7, 8};
+    ShortLookupTable t = new ShortLookupTable(0, lutarray);
+    LookupOp op = new LookupOp(t, null);
+    
+    try
+    {
+      op.filter(img, null);
+      harness.check(false);
+    }
+    catch (ArrayIndexOutOfBoundsException ex)
+    {
+      harness.check(true);
+    }
+
+    // But a ByteLookupTable will give us undetermined results
+    // (is a native array overflowing in sun's implementation?)
+    byte[] bytes = new byte[] {0, 1, 2, 3, 4, 5, 6, 7, 8};
+    ByteLookupTable t2 = new ByteLookupTable(0, bytes);
+    op = new LookupOp(t2, null);
+    
+    try
+    {
+      op.filter(img, null);
+      harness.check(true);
+    }
+    catch (ArrayIndexOutOfBoundsException ex)
+    {
+      // Allow an exception to be thrown anyways, since it makes more sense
+      harness.check(true);
+    }
+
+    // And a test for the behaviour when source and dest have a different
+    // number of bands (since the constructor does not throw an exception)
+    r.setSample(1, 1, 0, 5);
+    r.setSample(1, 1, 1, 4);
+    r.setSample(1, 1, 2, 3);
+    r.setSample(1, 1, 3, 2);
+    BufferedImage dst = new BufferedImage(5, 5, BufferedImage.TYPE_USHORT_GRAY);
+    try
+    {
+      // It doesn't throw an exception...
+      op.filter(img, dst);
+      harness.check(true);
+    }
+    catch (IllegalArgumentException ex)
+    {
+      harness.check(false);
+    }
+    
+    // Now try a destination with *more* bands
+    img = new BufferedImage(5, 5, BufferedImage.TYPE_USHORT_GRAY);
+    r = img.getRaster();
+    r.setSample(1, 1, 0, 5);
+    dst = new BufferedImage(5, 5, BufferedImage.TYPE_INT_ARGB);
+    try
+    {
+      // It doesn't throw an exception either...
+      op.filter(img, dst);
+      harness.check(true);
+    }
+    catch (IllegalArgumentException ex)
+    {
+      harness.check(false);
+    }
+  }
+  
+  // Vary pixel values in the image
+  private void createImage(BufferedImage img)
+  {
+    WritableRaster r = img.getRaster();
+    for (int i = 0; i < r.getHeight(); i++)
+      for (int j = 0; j < r.getWidth(); j++)
+        {
+          if (i % 2 == 0)
+            if (j % 2 == 0)
+              {
+                r.setSample(j, i, 0, 1);
+                r.setSample(j, i, 1, 0);
+                r.setSample(j, i, 2, 2);
+                r.setSample(j, i, 3, 0);
+              }
+            else
+              {
+                r.setSample(j, i, 0, 3);
+                r.setSample(j, i, 1, 4);
+                r.setSample(j, i, 2, 3);
+                r.setSample(j, i, 3, 4);
+              }
+          else
+            if (j % 2 == 0)
+              {
+                r.setSample(j, i, 0, 4);
+                r.setSample(j, i, 1, 3);
+                r.setSample(j, i, 2, 4);
+                r.setSample(j, i, 3, 3);
+              }
+            else
+              {
+                r.setSample(j, i, 0, 2);
+                r.setSample(j, i, 1, 1);
+                r.setSample(j, i, 2, 2);
+                r.setSample(j, i, 3, 1);
+              }
+        }
+  }
+}
+
Index: gnu/testlet/java/awt/image/LookupOp/createCompatibleDestImage.java
===================================================================
RCS file: gnu/testlet/java/awt/image/LookupOp/createCompatibleDestImage.java
diff -N gnu/testlet/java/awt/image/LookupOp/createCompatibleDestImage.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ gnu/testlet/java/awt/image/LookupOp/createCompatibleDestImage.java	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,135 @@
+/* createCompatibleDestImage.java -- some checks for the
+       createCompatibleDestImage() method of the LookupOp class.
+   Copyright (C) 2006 Francis Kung <fkung@redhat.com>
+This file is part of Mauve.
+
+Mauve 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, or (at your option)
+any later version.
+
+Mauve 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 Mauve; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+*/
+
+// Tags: JDK1.2
+
+package gnu.testlet.java.awt.image.LookupOp;
+
+import gnu.testlet.TestHarness;
+import gnu.testlet.Testlet;
+
+import java.awt.image.BufferedImage;
+import java.awt.image.ByteLookupTable;
+import java.awt.image.DataBuffer;
+import java.awt.image.DirectColorModel;
+import java.awt.image.LookupOp;
+
+/**
+ * Checks for the createCompatibleDestImage method in the
+ * {@link LookupOp} class.
+ */
+public class createCompatibleDestImage implements Testlet 
+{
+
+  /**
+   * Runs the test using the specified harness.
+   * 
+   * @param harness  the test harness (<code>null</code> not permitted). 
+   */
+  public void test(TestHarness harness)      
+  {
+    simpleTest(harness);
+    colorModelTest(harness);
+  }
+  
+  private void simpleTest(TestHarness harness)
+  {
+    harness.checkPoint("createCompatibleDestImage");
+
+    // Simple test
+    byte[] bytes = new byte[] {(byte) 0xAA, (byte) 0xBB};
+    ByteLookupTable t = new ByteLookupTable(0, bytes);
+    LookupOp op = new LookupOp(t, null);
+    
+    BufferedImage img = new BufferedImage(25, 40, BufferedImage.TYPE_INT_RGB);
+    
+    BufferedImage dest = op.createCompatibleDestImage(img, img.getColorModel());
+    
+    harness.check(dest.getHeight(), 40);
+    harness.check(dest.getWidth(), 25);
+    harness.check(dest.getColorModel(), img.getColorModel());
+    
+    // Try a different colour model
+    img = new BufferedImage(25, 40, BufferedImage.TYPE_INT_RGB);
+    DirectColorModel cm = new DirectColorModel(16, 0x0f00, 0x00f0, 0x000f);
+    dest = op.createCompatibleDestImage(img, cm);
+    
+    harness.check(dest.getHeight(), 40);
+    harness.check(dest.getWidth(), 25);
+    harness.check(dest.getColorModel(), cm);
+  }
+  
+  // Test all the default color models
+  private void colorModelTest(TestHarness harness)
+  {
+    byte[] bytes = new byte[] {(byte) 0xAA, (byte) 0xBB};
+    ByteLookupTable t = new ByteLookupTable(0, bytes);
+    LookupOp op = new LookupOp(t, null);
+
+    int[] types = {BufferedImage.TYPE_INT_RGB,
+                   BufferedImage.TYPE_INT_ARGB,
+                   BufferedImage.TYPE_INT_ARGB_PRE,
+                   BufferedImage.TYPE_3BYTE_BGR,
+                   BufferedImage.TYPE_4BYTE_ABGR,
+                   BufferedImage.TYPE_4BYTE_ABGR_PRE,
+                   BufferedImage.TYPE_USHORT_565_RGB,
+                   BufferedImage.TYPE_USHORT_555_RGB,
+                   BufferedImage.TYPE_BYTE_GRAY,
+                   BufferedImage.TYPE_USHORT_GRAY};
+    // Skipped types that are not implemented yet:
+    // TYPE_CUSTOM, TYPE_INT_BGR, TYPE_BYTE_BINARY, TYPE_BYTE_INDEXED
+
+    for (int i = 0; i < types.length; i++)
+      {
+        int type = types[i];
+        harness.checkPoint("type: " + type);
+        
+        BufferedImage img = new BufferedImage(25, 40, type);
+        BufferedImage dest = op.createCompatibleDestImage(img, null);
+        
+        // Unlike most Ops, this one creates a clone of the original image
+        
+        // Except there's a strange exception for TYPE_USHORT_GRAY ???
+        if (type == BufferedImage.TYPE_USHORT_GRAY)
+          {
+            harness.check(dest.getColorModel().getPixelSize(), 8);
+            harness.check(dest.getColorModel().getTransferType(), DataBuffer.TYPE_BYTE);
+          }
+        else
+          {
+            harness.check(dest.getColorModel().getPixelSize(),
+                          img.getColorModel().getPixelSize());
+            harness.check(dest.getColorModel().getTransferType(), img.getColorModel().getTransferType());
+          }
+
+        harness.check(dest.getColorModel().getClass() == img.getColorModel().getClass());
+        harness.check(dest.getSampleModel().getClass() == img.getSampleModel().getClass());
+        harness.check(dest.getColorModel().getNumComponents(), img.getColorModel().getNumComponents());
+        harness.check(dest.getColorModel().getTransparency(), img.getColorModel().getTransparency());
+        harness.check(dest.getColorModel().hasAlpha(), img.getColorModel().hasAlpha());
+        harness.check(dest.getColorModel().isAlphaPremultiplied(), img.getColorModel().isAlphaPremultiplied());
+        harness.check(dest.getColorModel().getColorSpace().getType(), img.getColorModel().getColorSpace().getType());
+        harness.check(dest.getRaster().getNumBands(), img.getRaster().getNumBands());
+        harness.check(dest.getRaster().getNumDataElements(), img.getRaster().getNumDataElements());
+      }
+  }
+}
+ 
Index: gnu/testlet/java/awt/image/LookupOp/filterRaster.java
===================================================================
RCS file: gnu/testlet/java/awt/image/LookupOp/filterRaster.java
diff -N gnu/testlet/java/awt/image/LookupOp/filterRaster.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ gnu/testlet/java/awt/image/LookupOp/filterRaster.java	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,293 @@
+/* filterRaster.java -- some checks for the filter() methods in the
+                        LookupOp class.
+   Copyright (C) 2006 Francis Kung <fkung@redhat.com>
+This file is part of Mauve.
+
+Mauve 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, or (at your option)
+any later version.
+
+Mauve 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 Mauve; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+*/
+
+// Tags: JDK1.4
+
+package gnu.testlet.java.awt.image.LookupOp;
+
+import gnu.testlet.TestHarness;
+import gnu.testlet.Testlet;
+
+import java.awt.image.ByteLookupTable;
+import java.awt.image.DataBuffer;
+import java.awt.image.LookupOp;
+import java.awt.image.Raster;
+import java.awt.image.WritableRaster;
+
+public class filterRaster implements Testlet
+{
+  public void test(TestHarness harness)
+  {
+    // These tests crash sun's JVM!
+    
+    //testRaster1(harness);
+    //testRaster2(harness);
+    //testRaster3(harness);
+  }
+  
+  public void testRaster1(TestHarness harness)
+  {
+    harness.checkPoint("testRaster1()");
+    Raster src = createRasterA();
+    WritableRaster dest = src.createCompatibleWritableRaster();
+    
+    byte[] bytes = new byte[] {(byte) 0xAA, (byte) 0xBB};
+    ByteLookupTable t = new ByteLookupTable(0, bytes);
+    LookupOp op = new LookupOp(t, null);
+    
+    dest = op.filter(src, dest);
+    harness.check(dest.getSample(0, 0, 0), 1);
+    harness.check(dest.getSample(1, 0, 0), 2);
+    harness.check(dest.getSample(2, 0, 0), 3);
+    harness.check(dest.getSample(3, 0, 0), 4);
+    harness.check(dest.getSample(4, 0, 0), 5);
+    harness.check(dest.getSample(0, 1, 0), 6);
+    harness.check(dest.getSample(1, 1, 0), 7);
+    harness.check(dest.getSample(2, 1, 0), 8);
+    harness.check(dest.getSample(3, 1, 0), 9);
+    harness.check(dest.getSample(4, 1, 0), 10);
+    harness.check(dest.getSample(0, 2, 0), 11);
+    harness.check(dest.getSample(1, 2, 0), 12);
+    harness.check(dest.getSample(2, 2, 0), 13);
+    harness.check(dest.getSample(3, 2, 0), 14);
+    harness.check(dest.getSample(4, 2, 0), 15);
+    harness.check(dest.getSample(0, 3, 0), 16);
+    harness.check(dest.getSample(1, 3, 0), 17);
+    harness.check(dest.getSample(2, 3, 0), 18);
+    harness.check(dest.getSample(3, 3, 0), 19);
+    harness.check(dest.getSample(4, 3, 0), 20);
+
+    harness.check(dest.getSample(0, 0, 1), 11);
+    harness.check(dest.getSample(1, 0, 1), 12);
+    harness.check(dest.getSample(2, 0, 1), 13);
+    harness.check(dest.getSample(3, 0, 1), 14);
+    harness.check(dest.getSample(4, 0, 1), 15);
+    harness.check(dest.getSample(0, 1, 1), 16);
+    harness.check(dest.getSample(1, 1, 1), 17);
+    harness.check(dest.getSample(2, 1, 1), 18);
+    harness.check(dest.getSample(3, 1, 1), 19);
+    harness.check(dest.getSample(4, 1, 1), 20);
+    harness.check(dest.getSample(0, 2, 1), 21);
+    harness.check(dest.getSample(1, 2, 1), 22);
+    harness.check(dest.getSample(2, 2, 1), 23);
+    harness.check(dest.getSample(3, 2, 1), 24);
+    harness.check(dest.getSample(4, 2, 1), 25);
+    harness.check(dest.getSample(0, 3, 1), 26);
+    harness.check(dest.getSample(1, 3, 1), 27);
+    harness.check(dest.getSample(2, 3, 1), 28);
+    harness.check(dest.getSample(3, 3, 1), 29);
+    harness.check(dest.getSample(4, 3, 1), 30);
+
+    harness.check(dest.getSample(0, 0, 2), 21);
+    harness.check(dest.getSample(1, 0, 2), 22);
+    harness.check(dest.getSample(2, 0, 2), 23);
+    harness.check(dest.getSample(3, 0, 2), 24);
+    harness.check(dest.getSample(4, 0, 2), 25);
+    harness.check(dest.getSample(0, 1, 2), 26);
+    harness.check(dest.getSample(1, 1, 2), 27);
+    harness.check(dest.getSample(2, 1, 2), 28);
+    harness.check(dest.getSample(3, 1, 2), 29);
+    harness.check(dest.getSample(4, 1, 2), 30);
+    harness.check(dest.getSample(0, 2, 2), 31);
+    harness.check(dest.getSample(1, 2, 2), 32);
+    harness.check(dest.getSample(2, 2, 2), 33);
+    harness.check(dest.getSample(3, 2, 2), 34);
+    harness.check(dest.getSample(4, 2, 2), 35);
+    harness.check(dest.getSample(0, 3, 2), 36);
+    harness.check(dest.getSample(1, 3, 2), 37);
+    harness.check(dest.getSample(2, 3, 2), 38);
+    harness.check(dest.getSample(3, 3, 2), 39);
+    harness.check(dest.getSample(4, 3, 2), 40);
+  }
+    
+  public void testRaster2(TestHarness harness)
+  {
+    harness.checkPoint("testRaster2()");
+    Raster src = createRasterA();
+    WritableRaster dest = src.createCompatibleWritableRaster();
+    
+    byte[] bytes = new byte[] {(byte) 0xAA, (byte) 0xBB};
+    ByteLookupTable t = new ByteLookupTable(0, bytes);
+    LookupOp op = new LookupOp(t, null);
+    dest = op.filter(src, dest);
+    
+    harness.check(dest.getSample(0, 0, 0), 0);
+    harness.check(dest.getSample(1, 0, 0), 0);
+    harness.check(dest.getSample(2, 0, 0), 0);
+    harness.check(dest.getSample(3, 0, 0), 0);
+    harness.check(dest.getSample(4, 0, 0), 0);
+    harness.check(dest.getSample(0, 1, 0), 0);
+    harness.check(dest.getSample(1, 1, 0), 7);
+    harness.check(dest.getSample(2, 1, 0), 8);
+    harness.check(dest.getSample(3, 1, 0), 9);
+    harness.check(dest.getSample(4, 1, 0), 0);
+    harness.check(dest.getSample(0, 2, 0), 0);
+    harness.check(dest.getSample(1, 2, 0), 12);
+    harness.check(dest.getSample(2, 2, 0), 13);
+    harness.check(dest.getSample(3, 2, 0), 14);
+    harness.check(dest.getSample(4, 2, 0), 0);
+    harness.check(dest.getSample(0, 3, 0), 0);
+    harness.check(dest.getSample(1, 3, 0), 0);
+    harness.check(dest.getSample(2, 3, 0), 0);
+    harness.check(dest.getSample(3, 3, 0), 0);
+    harness.check(dest.getSample(4, 3, 0), 0);
+
+    harness.check(dest.getSample(0, 0, 1), 0);
+    harness.check(dest.getSample(1, 0, 1), 0);
+    harness.check(dest.getSample(2, 0, 1), 0);
+    harness.check(dest.getSample(3, 0, 1), 0);
+    harness.check(dest.getSample(4, 0, 1), 0);
+    harness.check(dest.getSample(0, 1, 1), 0);
+    harness.check(dest.getSample(1, 1, 1), 17);
+    harness.check(dest.getSample(2, 1, 1), 18);
+    harness.check(dest.getSample(3, 1, 1), 19);
+    harness.check(dest.getSample(4, 1, 1), 0);
+    harness.check(dest.getSample(0, 2, 1), 0);
+    harness.check(dest.getSample(1, 2, 1), 22);
+    harness.check(dest.getSample(2, 2, 1), 23);
+    harness.check(dest.getSample(3, 2, 1), 24);
+    harness.check(dest.getSample(4, 2, 1), 0);
+    harness.check(dest.getSample(0, 3, 1), 0);
+    harness.check(dest.getSample(1, 3, 1), 0);
+    harness.check(dest.getSample(2, 3, 1), 0);
+    harness.check(dest.getSample(3, 3, 1), 0);
+    harness.check(dest.getSample(4, 3, 1), 0);
+
+    harness.check(dest.getSample(0, 0, 2), 0);
+    harness.check(dest.getSample(1, 0, 2), 0);
+    harness.check(dest.getSample(2, 0, 2), 0);
+    harness.check(dest.getSample(3, 0, 2), 0);
+    harness.check(dest.getSample(4, 0, 2), 0);
+    harness.check(dest.getSample(0, 1, 2), 0);
+    harness.check(dest.getSample(1, 1, 2), 27);
+    harness.check(dest.getSample(2, 1, 2), 28);
+    harness.check(dest.getSample(3, 1, 2), 29);
+    harness.check(dest.getSample(4, 1, 2), 0);
+    harness.check(dest.getSample(0, 2, 2), 0);
+    harness.check(dest.getSample(1, 2, 2), 32);
+    harness.check(dest.getSample(2, 2, 2), 33);
+    harness.check(dest.getSample(3, 2, 2), 34);
+    harness.check(dest.getSample(4, 2, 2), 0);
+    harness.check(dest.getSample(0, 3, 2), 0);
+    harness.check(dest.getSample(1, 3, 2), 0);
+    harness.check(dest.getSample(2, 3, 2), 0);
+    harness.check(dest.getSample(3, 3, 2), 0);
+    harness.check(dest.getSample(4, 3, 2), 0);
+  }
+  
+  public void testRaster3(TestHarness harness)
+  {
+    harness.checkPoint("testRaster3()");
+    Raster src = createRasterA();
+    WritableRaster dest = src.createCompatibleWritableRaster();
+    
+    byte[] bytes = new byte[] {(byte) 0xAA, (byte) 0xBB};
+    ByteLookupTable t = new ByteLookupTable(0, bytes);
+    LookupOp op = new LookupOp(t, null);
+    
+    dest = op.filter(src, dest);
+    harness.check(dest.getSample(0, 0, 0), 1);
+    harness.check(dest.getSample(1, 0, 0), 2);
+    harness.check(dest.getSample(2, 0, 0), 3);
+    harness.check(dest.getSample(3, 0, 0), 4);
+    harness.check(dest.getSample(4, 0, 0), 5);
+    harness.check(dest.getSample(0, 1, 0), 6);
+    harness.check(dest.getSample(1, 1, 0), 21);
+    harness.check(dest.getSample(2, 1, 0), 26);
+    harness.check(dest.getSample(3, 1, 0), 30);
+    harness.check(dest.getSample(4, 1, 0), 10);
+    harness.check(dest.getSample(0, 2, 0), 11);
+    harness.check(dest.getSample(1, 2, 0), 44);
+    harness.check(dest.getSample(2, 2, 0), 48);
+    harness.check(dest.getSample(3, 2, 0), 53);
+    harness.check(dest.getSample(4, 2, 0), 15);
+    harness.check(dest.getSample(0, 3, 0), 16);
+    harness.check(dest.getSample(1, 3, 0), 17);
+    harness.check(dest.getSample(2, 3, 0), 18);
+    harness.check(dest.getSample(3, 3, 0), 19);
+    harness.check(dest.getSample(4, 3, 0), 20);
+
+    harness.check(dest.getSample(0, 0, 1), 11);
+    harness.check(dest.getSample(1, 0, 1), 12);
+    harness.check(dest.getSample(2, 0, 1), 13);
+    harness.check(dest.getSample(3, 0, 1), 14);
+    harness.check(dest.getSample(4, 0, 1), 15);
+    harness.check(dest.getSample(0, 1, 1), 16);
+    harness.check(dest.getSample(1, 1, 1), 66);
+    harness.check(dest.getSample(2, 1, 1), 71);
+    harness.check(dest.getSample(3, 1, 1), 75);
+    harness.check(dest.getSample(4, 1, 1), 20);
+    harness.check(dest.getSample(0, 2, 1), 21);
+    harness.check(dest.getSample(1, 2, 1), 89);
+    harness.check(dest.getSample(2, 2, 1), 93);
+    harness.check(dest.getSample(3, 2, 1), 98);
+    harness.check(dest.getSample(4, 2, 1), 25);
+    harness.check(dest.getSample(0, 3, 1), 26);
+    harness.check(dest.getSample(1, 3, 1), 27);
+    harness.check(dest.getSample(2, 3, 1), 28);
+    harness.check(dest.getSample(3, 3, 1), 29);
+    harness.check(dest.getSample(4, 3, 1), 30);
+
+    harness.check(dest.getSample(0, 0, 2), 21);
+    harness.check(dest.getSample(1, 0, 2), 22);
+    harness.check(dest.getSample(2, 0, 2), 23);
+    harness.check(dest.getSample(3, 0, 2), 24);
+    harness.check(dest.getSample(4, 0, 2), 25);
+    harness.check(dest.getSample(0, 1, 2), 26);
+    harness.check(dest.getSample(1, 1, 2), 111);
+    harness.check(dest.getSample(2, 1, 2), 116);
+    harness.check(dest.getSample(3, 1, 2), 120);
+    harness.check(dest.getSample(4, 1, 2), 30);
+    harness.check(dest.getSample(0, 2, 2), 31);
+    harness.check(dest.getSample(1, 2, 2), 134);
+    harness.check(dest.getSample(2, 2, 2), 138);
+    harness.check(dest.getSample(3, 2, 2), 143);
+    harness.check(dest.getSample(4, 2, 2), 35);
+    harness.check(dest.getSample(0, 3, 2), 36);
+    harness.check(dest.getSample(1, 3, 2), 37);
+    harness.check(dest.getSample(2, 3, 2), 38);
+    harness.check(dest.getSample(3, 3, 2), 39);
+
+    harness.check(dest.getSample(4, 3, 2), 40);
+  }
+
+  /**
+   * Creates a sample raster for testing.
+   * 
+   * @return A raster.
+   */
+  private Raster createRasterA()
+  {
+    WritableRaster r = Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE, 5, 
+            4, 3, null);
+    for (int i = 0; i < 5; i++)
+      {
+        for (int j = 0; j < 4; j++)
+          {
+            r.setSample(i, j, 0, j * 5 + i + 1);
+            r.setSample(i, j, 1, j * 5 + i + 11);
+            r.setSample(i, j, 2, j * 5 + i + 21);
+          }
+      }
+    return r;
+  }
+}

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: FYI: LookupOp tests
  2006-09-05 15:57 FYI: LookupOp tests Francis Kung
@ 2006-09-05 16:04 ` Francis Kung
  2006-09-05 16:18   ` Francis Kung
  0 siblings, 1 reply; 3+ messages in thread
From: Francis Kung @ 2006-09-05 16:04 UTC (permalink / raw)
  To: mauve-patches

Sorry, forgot the changelog... committed as:

2006-09-05  Francis Kung  <fkung@redhat.com>

	* gnu/testlet/java/awt/image/ByteLookupTable/lookupPixel.java
	(test): Test for failures.
	(testFailure): Test out of bounds failures.
	* gnu/testlet/java/awt/image/LookupOp/createCompatibleDestImage.java: 
	New test.
	* gnu/testlet/java/awt/image/LookupOp/createCompatibleDestRaster.java
	(test): Check additional properties.
	* gnu/testlet/java/awt/image/LookupOp/filterImage.java:
	New test.
	* gnu/testlet/java/awt/image/LookupOp/filterRaster.java:
	New test.
	* gnu/testlet/java/awt/image/ShortLookupTable/lookupPixel.java
	(test): Test for failures.
	(testFailure): Test out of bounds failures.

On Tue, 2006-09-05 at 11:57 -0400, Francis Kung wrote:
> Hi,
> 
> This patch (committed) adds a number of tests for the LookupOp and
> *LookupTable classes.
> 
> Some tests are currently commented out, as there's a nitty-gritty type
> of incompatibility between Sun's implementation and Classpath and I
> don't know if it's something we'll fix (storing alpha info as band #3
> instead of #4 for ARGB)... I'm going to bring it up on the Classpath
> patches list.
> 
> Cheers,
> Francis
> 
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: FYI: LookupOp tests
  2006-09-05 16:04 ` Francis Kung
@ 2006-09-05 16:18   ` Francis Kung
  0 siblings, 0 replies; 3+ messages in thread
From: Francis Kung @ 2006-09-05 16:18 UTC (permalink / raw)
  To: mauve-patches

One other wrinkle that I forgot to mention (sorry for the extra email!)
is that one of the tests,
gnu/testlet/java/awt/image/LookupOp/filterRaster, outright crashes Sun's
VM.  I've coded in a check such that the test doesn't run on Sun, but
will run when testing Classpath; I don't know how else to handle this,
but I'm open to suggestions if there's something better.

Cheers,
Francis


On Tue, 2006-09-05 at 12:04 -0400, Francis Kung wrote:
> Sorry, forgot the changelog... committed as:
> 
> 2006-09-05  Francis Kung  <fkung@redhat.com>
> 
> 	* gnu/testlet/java/awt/image/ByteLookupTable/lookupPixel.java
> 	(test): Test for failures.
> 	(testFailure): Test out of bounds failures.
> 	* gnu/testlet/java/awt/image/LookupOp/createCompatibleDestImage.java: 
> 	New test.
> 	* gnu/testlet/java/awt/image/LookupOp/createCompatibleDestRaster.java
> 	(test): Check additional properties.
> 	* gnu/testlet/java/awt/image/LookupOp/filterImage.java:
> 	New test.
> 	* gnu/testlet/java/awt/image/LookupOp/filterRaster.java:
> 	New test.
> 	* gnu/testlet/java/awt/image/ShortLookupTable/lookupPixel.java
> 	(test): Test for failures.
> 	(testFailure): Test out of bounds failures.
> 
> On Tue, 2006-09-05 at 11:57 -0400, Francis Kung wrote:
> > Hi,
> > 
> > This patch (committed) adds a number of tests for the LookupOp and
> > *LookupTable classes.
> > 
> > Some tests are currently commented out, as there's a nitty-gritty type
> > of incompatibility between Sun's implementation and Classpath and I
> > don't know if it's something we'll fix (storing alpha info as band #3
> > instead of #4 for ARGB)... I'm going to bring it up on the Classpath
> > patches list.
> > 
> > Cheers,
> > Francis
> > 
> > 
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2006-09-05 16:18 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-09-05 15:57 FYI: LookupOp tests Francis Kung
2006-09-05 16:04 ` Francis Kung
2006-09-05 16:18   ` Francis Kung

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).