Skip to content

Commit

Permalink
Modify shape ifaces to use unbounded generics
Browse files Browse the repository at this point in the history
and fix tests
  • Loading branch information
awalter17 committed Jan 25, 2018
1 parent e2db559 commit 382365f
Show file tree
Hide file tree
Showing 22 changed files with 292 additions and 283 deletions.
5 changes: 4 additions & 1 deletion src/main/java/net/imglib2/roi/geom/real/AbstractSphere.java
Expand Up @@ -128,12 +128,15 @@ public void setRadius( final double radius )
}

@Override
@SuppressWarnings( "unchecked" )
public boolean equals( final Object obj )
{
if ( !( obj instanceof SuperEllipsoid ) )
return false;
if ( !( ( ( SuperEllipsoid< ? > ) obj ).center() instanceof RealLocalizable ) )
return false;

final SuperEllipsoid< ? > se = ( SuperEllipsoid< ? > ) obj;
final SuperEllipsoid< RealLocalizable > se = ( SuperEllipsoid< RealLocalizable > ) obj;
if ( se.numDimensions() != n || 2 != se.exponent() || boundaryType() != se.boundaryType() )
return false;

Expand Down
Expand Up @@ -137,12 +137,15 @@ public void setSemiAxisLength( final int d, final double length )
}

@Override
@SuppressWarnings( "unchecked" )
public boolean equals( final Object obj )
{
if ( !( obj instanceof SuperEllipsoid ) )
return false;
if ( !( ( ( SuperEllipsoid< ? > ) obj ).center() instanceof RealLocalizable ) )
return false;

final SuperEllipsoid< ? > se = ( SuperEllipsoid< ? > ) obj;
final SuperEllipsoid< RealLocalizable > se = ( SuperEllipsoid< RealLocalizable > ) obj;
if ( se.numDimensions() != n || exponent != se.exponent() || boundaryType() != se.boundaryType() )
return false;

Expand Down
7 changes: 3 additions & 4 deletions src/main/java/net/imglib2/roi/geom/real/Box.java
Expand Up @@ -34,16 +34,15 @@

package net.imglib2.roi.geom.real;

import net.imglib2.RealLocalizable;
import net.imglib2.RealPositionable;
import net.imglib2.roi.RealMaskRealInterval;

/**
* A {@link RealMaskRealInterval} which defines an n-d box, cuboid, hyperrectangle, etc.
* A {@link RealMaskRealInterval} which defines an n-d box, cuboid,
* hyperrectangle, etc.
*
* @author Alison Walter
*/
public interface Box< T extends RealLocalizable & RealPositionable > extends RealMaskRealInterval
public interface Box< T > extends RealMaskRealInterval
{
/** Returns side length of Box in dimension d. */
double sideLength( int d );
Expand Down
5 changes: 4 additions & 1 deletion src/main/java/net/imglib2/roi/geom/real/DefaultLine.java
Expand Up @@ -137,12 +137,15 @@ public RealLocalizableRealPositionable endpointTwo()
}

@Override
@SuppressWarnings( "unchecked" )
public boolean equals( final Object obj )
{
if ( !( obj instanceof Line ) )
return false;
if ( !( ( ( Line< ? > ) obj ).endpointOne() instanceof RealLocalizable ) )
return false;

final Line< ? > l = ( Line< ? > ) obj;
final Line< RealLocalizable > l = ( Line< RealLocalizable > ) obj;
if ( l.numDimensions() != n || boundaryType() != l.boundaryType() )
return false;

Expand Down
Expand Up @@ -157,12 +157,15 @@ public void removeVertex( final int index )
}

@Override
@SuppressWarnings( "unchecked" )
public boolean equals( final Object obj )
{
if ( !( obj instanceof Polygon2D ) )
return false;
if ( !( ( ( Polygon2D< ? > ) obj ).vertex( 0 ) instanceof RealLocalizable ) )
return false;

final Polygon2D< ? > p = ( Polygon2D< ? > ) obj;
final Polygon2D< RealLocalizable > p = ( Polygon2D< RealLocalizable > ) obj;
if ( numVertices() != p.numVertices() || boundaryType() != p.boundaryType() )
return false;

Expand Down
5 changes: 4 additions & 1 deletion src/main/java/net/imglib2/roi/geom/real/DefaultPolyline.java
Expand Up @@ -128,12 +128,15 @@ public void removeVertex( final int index )
}

@Override
@SuppressWarnings( "unchecked" )
public boolean equals( final Object obj )
{
if ( !( obj instanceof Polyline ) )
return false;
if ( !( ( ( Polyline< ? > ) obj ).vertex( 0 ) instanceof RealLocalizableRealPositionable ) )
return false;

final Polyline< ? > p = ( Polyline< ? > ) obj;
final Polyline< RealLocalizable > p = ( Polyline< RealLocalizable > ) obj;
if ( numVertices() != p.numVertices() || boundaryType() != p.boundaryType() || n != p.numDimensions() )
return false;

Expand Down
4 changes: 1 addition & 3 deletions src/main/java/net/imglib2/roi/geom/real/Ellipsoid.java
Expand Up @@ -34,16 +34,14 @@

package net.imglib2.roi.geom.real;

import net.imglib2.RealLocalizable;
import net.imglib2.RealPositionable;
import net.imglib2.roi.RealMaskRealInterval;

/**
* A {@link RealMaskRealInterval} which defines an n-d ellipsoid.
*
* @author Alison Walter
*/
public interface Ellipsoid< T extends RealLocalizable & RealPositionable > extends SuperEllipsoid< T >
public interface Ellipsoid< T > extends SuperEllipsoid< T >
{
/**
* Ellipsoids have exponents of 2.
Expand Down
4 changes: 1 addition & 3 deletions src/main/java/net/imglib2/roi/geom/real/Line.java
Expand Up @@ -34,8 +34,6 @@

package net.imglib2.roi.geom.real;

import net.imglib2.RealLocalizable;
import net.imglib2.RealPositionable;
import net.imglib2.roi.BoundaryType;
import net.imglib2.roi.RealMaskRealInterval;

Expand All @@ -44,7 +42,7 @@
*
* @author Alison Walter
*/
public interface Line< T extends RealLocalizable & RealPositionable > extends RealMaskRealInterval
public interface Line< T > extends RealMaskRealInterval
{
/** Returns the first endpoint. */
T endpointOne();
Expand Down
3 changes: 1 addition & 2 deletions src/main/java/net/imglib2/roi/geom/real/PointMask.java
Expand Up @@ -35,7 +35,6 @@
package net.imglib2.roi.geom.real;

import net.imglib2.RealLocalizable;
import net.imglib2.RealPositionable;
import net.imglib2.roi.BoundaryType;
import net.imglib2.roi.RealMaskRealInterval;

Expand All @@ -44,7 +43,7 @@
*
* @author Alison Walter
*/
public interface PointMask extends RealMaskRealInterval, RealLocalizable, RealPositionable
public interface PointMask extends RealMaskRealInterval, RealLocalizable
{
@Override
default BoundaryType boundaryType()
Expand Down
4 changes: 1 addition & 3 deletions src/main/java/net/imglib2/roi/geom/real/Polygon2D.java
Expand Up @@ -34,16 +34,14 @@

package net.imglib2.roi.geom.real;

import net.imglib2.RealLocalizable;
import net.imglib2.RealPositionable;
import net.imglib2.roi.RealMaskRealInterval;

/**
* A {@link RealMaskRealInterval} which defines a real space 2D polygon.
*
* @author Alison Walter
*/
public interface Polygon2D< T extends RealLocalizable & RealPositionable > extends RealMaskRealInterval
public interface Polygon2D< T > extends RealMaskRealInterval
{
/** Return the vertex at the specified position */
T vertex( final int pos );
Expand Down
3 changes: 1 addition & 2 deletions src/main/java/net/imglib2/roi/geom/real/Polyline.java
Expand Up @@ -35,7 +35,6 @@
package net.imglib2.roi.geom.real;

import net.imglib2.RealLocalizable;
import net.imglib2.RealPositionable;
import net.imglib2.roi.BoundaryType;
import net.imglib2.roi.RealMaskRealInterval;

Expand All @@ -44,7 +43,7 @@
*
* @author Alison Walter
*/
public interface Polyline< T extends RealLocalizable & RealPositionable > extends RealMaskRealInterval
public interface Polyline< T > extends RealMaskRealInterval
{
/** Returns the vertex at the specified position. */
T vertex( final int pos );
Expand Down
4 changes: 1 addition & 3 deletions src/main/java/net/imglib2/roi/geom/real/Sphere.java
Expand Up @@ -34,16 +34,14 @@

package net.imglib2.roi.geom.real;

import net.imglib2.RealLocalizable;
import net.imglib2.RealPositionable;
import net.imglib2.roi.RealMaskRealInterval;

/**
* A {@link RealMaskRealInterval} which defines an n-d sphere.
*
* @author Alison Walter
*/
public interface Sphere< T extends RealLocalizable & RealPositionable > extends Ellipsoid< T >
public interface Sphere< T > extends Ellipsoid< T >
{
/** Returns the radius of this sphere. */
double radius();
Expand Down
4 changes: 1 addition & 3 deletions src/main/java/net/imglib2/roi/geom/real/SuperEllipsoid.java
Expand Up @@ -34,16 +34,14 @@

package net.imglib2.roi.geom.real;

import net.imglib2.RealLocalizable;
import net.imglib2.RealPositionable;
import net.imglib2.roi.RealMaskRealInterval;

/**
* A {@link RealMaskRealInterval} which defines an n-d superellipsoid.
*
* @author Alison Walter
*/
public interface SuperEllipsoid< T extends RealLocalizable & RealPositionable > extends RealMaskRealInterval
public interface SuperEllipsoid< T > extends RealMaskRealInterval
{
/** Returns the exponent of this superellipsoid */
double exponent();
Expand Down
53 changes: 27 additions & 26 deletions src/test/java/net/imglib2/roi/geom/BoxTest.java
Expand Up @@ -47,6 +47,7 @@
import net.imglib2.roi.geom.real.ClosedEllipsoid;
import net.imglib2.roi.geom.real.Ellipsoid;
import net.imglib2.roi.geom.real.OpenBox;
import net.imglib2.roi.util.RealLocalizableRealPositionable;

import org.junit.Rule;
import org.junit.Test;
Expand All @@ -65,7 +66,7 @@ public class BoxTest
@Test
public void testTwoDimensionalOpenRectangle()
{
final Box< ? > b = new OpenBox( new double[] { -6.8, -3.2375 }, new double[] { 13.2, 3.2625 } );
final Box< RealLocalizableRealPositionable > b = new OpenBox( new double[] { -6.8, -3.2375 }, new double[] { 13.2, 3.2625 } );

// vertices
assertFalse( b.test( new RealPoint( new double[] { -6.8, -3.2375 } ) ) );
Expand Down Expand Up @@ -96,7 +97,7 @@ public void testTwoDimensionalOpenRectangle()
@Test
public void testTwoDimensionalClosedRectangle()
{
final Box< ? > b = new ClosedBox( new double[] { -6.8, -3.2375 }, new double[] { 13.2, 3.2625 } );
final Box< RealLocalizableRealPositionable > b = new ClosedBox( new double[] { -6.8, -3.2375 }, new double[] { 13.2, 3.2625 } );

// vertices
assertTrue( b.test( new RealPoint( new double[] { -6.8, -3.2375 } ) ) );
Expand Down Expand Up @@ -126,7 +127,7 @@ public void testTwoDimensionalClosedRectangle()
@Test
public void testHighDimensionalOpenBox()
{
final Box< ? > hc = new OpenBox( new double[] { 3, 3, 3, 3 }, new double[] { 7, 7, 7, 7 } );
final Box< RealLocalizableRealPositionable > hc = new OpenBox( new double[] { 3, 3, 3, 3 }, new double[] { 7, 7, 7, 7 } );

// vertices
assertFalse( hc.test( new RealPoint( new double[] { 3, 3, 3, 3 } ) ) );
Expand Down Expand Up @@ -173,7 +174,7 @@ public void testHighDimensionalOpenBox()
@Test
public void testHighDimensionalClosedBox()
{
final Box< ? > hc = new ClosedBox( new double[] { 3, 3, 3, 3 }, new double[] { 7, 7, 7, 7 } );
final Box< RealLocalizableRealPositionable > hc = new ClosedBox( new double[] { 3, 3, 3, 3 }, new double[] { 7, 7, 7, 7 } );

// vertices
assertTrue( hc.test( new RealPoint( new double[] { 3, 3, 3, 3 } ) ) );
Expand Down Expand Up @@ -220,7 +221,7 @@ public void testHighDimensionalClosedBox()
@Test
public void testMutatingClosedBox()
{
final Box< ? > b = new ClosedBox( new double[] { 2, 2 }, new double[] { 5, 5 } );
final Box< RealLocalizableRealPositionable > b = new ClosedBox( new double[] { 2, 2 }, new double[] { 5, 5 } );

assertEquals( b.center().getDoublePosition( 0 ), 3.5, 0 );
assertEquals( b.sideLength( 1 ), 3, 0 );
Expand All @@ -245,7 +246,7 @@ public void testMutatingClosedBox()
@Test
public void testMutatingOpenBox()
{
final Box< ? > b = new OpenBox( new double[] { 1.25, 2 }, new double[] { 5, 3.5 } );
final Box< RealLocalizableRealPositionable > b = new OpenBox( new double[] { 1.25, 2 }, new double[] { 5, 3.5 } );

assertEquals( b.center().getDoublePosition( 0 ), 3.125, 0 );
assertEquals( b.center().getDoublePosition( 1 ), 2.75, 0 );
Expand Down Expand Up @@ -285,7 +286,7 @@ public void testMinGreaterThanMax()
@Test
public void testMaxGreaterThanMin()
{
final Box< ? > b = new ClosedBox( new double[] { 1, 2, 3 }, new double[] { 3, 4, 5, 6 } );
final Box< RealLocalizableRealPositionable > b = new ClosedBox( new double[] { 1, 2, 3 }, new double[] { 3, 4, 5, 6 } );

assertEquals( b.numDimensions(), 3 );
assertEquals( b.sideLength( 2 ), 2, 0 );
Expand All @@ -297,7 +298,7 @@ public void testMaxGreaterThanMin()
@Test
public void testSetNegativeEdgeLength()
{
final Box< ? > b = new OpenBox( new double[] { 1, 1 }, new double[] { 11, 11 } );
final Box< RealLocalizableRealPositionable > b = new OpenBox( new double[] { 1, 1 }, new double[] { 11, 11 } );

exception.expect( IllegalArgumentException.class );
b.setSideLength( 1, -2.25 );
Expand All @@ -306,7 +307,7 @@ public void testSetNegativeEdgeLength()
@Test
public void testSetCenterTooShort()
{
final Box< ? > b = new OpenBox( new double[] { 1, 1 }, new double[] { 11, 11 } );
final Box< RealLocalizableRealPositionable > b = new OpenBox( new double[] { 1, 1 }, new double[] { 11, 11 } );

exception.expect( IndexOutOfBoundsException.class );
b.center().setPosition( new double[] { 3 } );
Expand All @@ -315,7 +316,7 @@ public void testSetCenterTooShort()
@Test
public void testSetCenterTooLong()
{
final Box< ? > b = new OpenBox( new double[] { 1, 1 }, new double[] { 11, 11 } );
final Box< RealLocalizableRealPositionable > b = new OpenBox( new double[] { 1, 1 }, new double[] { 11, 11 } );
b.center().setPosition( new double[] { 7.25, 3.125, 4 } );

final RealLocalizable c = b.center();
Expand All @@ -330,7 +331,7 @@ public void testBounds()
// Bounds should be the same for open or closed boxes
double[] min = new double[] { 10, 6 };
double[] max = new double[] { 12.5, 20 };
final Box< ? > b = new ClosedBox( min, max );
final Box< RealLocalizableRealPositionable > b = new ClosedBox( min, max );
final double[] bMax = new double[ 2 ];
final double[] bMin = new double[ 2 ];
b.realMax( bMax );
Expand Down Expand Up @@ -360,13 +361,13 @@ public void testBounds()
@Test
public void testEquals()
{
final Box< ? > cb = new ClosedBox( new double[] { 1, 2.5, 0 }, new double[] { 6.25, 10, 7.125 } );
final Box< ? > cb2 = new ClosedBox( new double[] { 1, 2.25, 0 }, new double[] { 6.25, 10, 7.125 } );
final Box< ? > cb3 = new ClosedBox( new double[] { 1, 2.5, 0, -1 }, new double[] { 6.25, 10, 7.125, 12 } );
final Box< ? > cb4 = new ClosedBox( new double[] { 1, 2.5 }, new double[] { 6.25, 10 } );
final Box< ? > cb5 = new ClosedBox( new double[] { 1, 2.5, 0 }, new double[] { 6.25, 10, 7.125 } );
final Box< ? > ob = new OpenBox( new double[] { 1, 2.5, 0 }, new double[] { 6.25, 10, 7.125 } );
final Ellipsoid< ? > e = new ClosedEllipsoid( new double[] { 3.625, 6.25, 3.5625 }, new double[] { 2.625, 3.75, 3.5625 } );
final Box< RealLocalizableRealPositionable > cb = new ClosedBox( new double[] { 1, 2.5, 0 }, new double[] { 6.25, 10, 7.125 } );
final Box< RealLocalizableRealPositionable > cb2 = new ClosedBox( new double[] { 1, 2.25, 0 }, new double[] { 6.25, 10, 7.125 } );
final Box< RealLocalizableRealPositionable > cb3 = new ClosedBox( new double[] { 1, 2.5, 0, -1 }, new double[] { 6.25, 10, 7.125, 12 } );
final Box< RealLocalizableRealPositionable > cb4 = new ClosedBox( new double[] { 1, 2.5 }, new double[] { 6.25, 10 } );
final Box< RealLocalizableRealPositionable > cb5 = new ClosedBox( new double[] { 1, 2.5, 0 }, new double[] { 6.25, 10, 7.125 } );
final Box< RealLocalizableRealPositionable > ob = new OpenBox( new double[] { 1, 2.5, 0 }, new double[] { 6.25, 10, 7.125 } );
final Ellipsoid< RealLocalizableRealPositionable > e = new ClosedEllipsoid( new double[] { 3.625, 6.25, 3.5625 }, new double[] { 2.625, 3.75, 3.5625 } );

// Same box
assertTrue( cb.equals( cb5 ) );
Expand All @@ -385,14 +386,14 @@ public void testEquals()
@Test
public void testHashCode()
{
final Box< ? > cb = new ClosedBox( new double[] { 1, 2.5, 0 }, new double[] { 6.25, 10, 7.125 } );
final Box< ? > cb2 = new ClosedBox( new double[] { 1, 2.25, 0 }, new double[] { 6.25, 10, 7.125 } );
final Box< ? > cb3 = new ClosedBox( new double[] { 1, 2.5, 0, -1 }, new double[] { 6.25, 10, 7.125, 12 } );
final Box< ? > cb4 = new ClosedBox( new double[] { 1, 2.5 }, new double[] { 6.25, 10 } );
final Box< ? > cb5 = new ClosedBox( new double[] { 1, 2.5, 0 }, new double[] { 6.25, 10, 7.125 } );
final Box< ? > ob = new OpenBox( new double[] { 1, 2.5, 0 }, new double[] { 6.25, 10, 7.125 } );
final Ellipsoid< ? > e = new ClosedEllipsoid( new double[] { 3.625, 6.25, 3.5625 }, new double[] { 2.625, 3.75, 3.5625 } );
final Ellipsoid< ? > e2 = new ClosedEllipsoid( new double[] { 1, 2.5, 0 }, new double[] { 6.25, 10, 7.125 } );
final Box< RealLocalizableRealPositionable > cb = new ClosedBox( new double[] { 1, 2.5, 0 }, new double[] { 6.25, 10, 7.125 } );
final Box< RealLocalizableRealPositionable > cb2 = new ClosedBox( new double[] { 1, 2.25, 0 }, new double[] { 6.25, 10, 7.125 } );
final Box< RealLocalizableRealPositionable > cb3 = new ClosedBox( new double[] { 1, 2.5, 0, -1 }, new double[] { 6.25, 10, 7.125, 12 } );
final Box< RealLocalizableRealPositionable > cb4 = new ClosedBox( new double[] { 1, 2.5 }, new double[] { 6.25, 10 } );
final Box< RealLocalizableRealPositionable > cb5 = new ClosedBox( new double[] { 1, 2.5, 0 }, new double[] { 6.25, 10, 7.125 } );
final Box< RealLocalizableRealPositionable > ob = new OpenBox( new double[] { 1, 2.5, 0 }, new double[] { 6.25, 10, 7.125 } );
final Ellipsoid< RealLocalizableRealPositionable > e = new ClosedEllipsoid( new double[] { 3.625, 6.25, 3.5625 }, new double[] { 2.625, 3.75, 3.5625 } );
final Ellipsoid< RealLocalizableRealPositionable > e2 = new ClosedEllipsoid( new double[] { 1, 2.5, 0 }, new double[] { 6.25, 10, 7.125 } );

assertEquals( cb.hashCode(), cb5.hashCode() );
assertNotEquals( cb.hashCode(), cb2.hashCode() );
Expand Down

0 comments on commit 382365f

Please sign in to comment.