From: kruland2607 Date: Fri, 10 Aug 2012 19:09:27 +0000 (+0000) Subject: Added unit tests and fixed rounding problem in ArrayUtils.range(). X-Git-Tag: upstream/12.09^2~59 X-Git-Url: https://git.gag.com/?p=debian%2Fopenrocket;a=commitdiff_plain;h=cbfd370eecee19979823b7a1953ae1ee55633369 Added unit tests and fixed rounding problem in ArrayUtils.range(). git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@965 180e2498-e6e9-4542-8430-84ac67f01cd8 --- diff --git a/core/src/net/sf/openrocket/util/ArrayUtils.java b/core/src/net/sf/openrocket/util/ArrayUtils.java index 59290b12..8e504a55 100644 --- a/core/src/net/sf/openrocket/util/ArrayUtils.java +++ b/core/src/net/sf/openrocket/util/ArrayUtils.java @@ -10,7 +10,12 @@ public class ArrayUtils { */ public static double[] range(double start, double stop, double step){ - int size = (int) Math.floor(((stop - start) / step)); + int size = 0 ; + if ( stop <= start ) { + size = 0; + } else { + size = (int) Math.ceil(((stop - start) / step)); + } //System.out.println("Range from "+start+" to "+stop+" step "+step+" has length "+size); diff --git a/core/test/net/sf/openrocket/util/ArrayUtilsTest.java b/core/test/net/sf/openrocket/util/ArrayUtilsTest.java index aefc2185..662ef5d6 100644 --- a/core/test/net/sf/openrocket/util/ArrayUtilsTest.java +++ b/core/test/net/sf/openrocket/util/ArrayUtilsTest.java @@ -11,25 +11,25 @@ public class ArrayUtilsTest { public void testCopyOfRange_NullArg() { ArrayUtils.copyOfRange( (Byte[]) null, 0 , 14); } - + @Test(expected=ArrayIndexOutOfBoundsException.class) public void testCopyOfRange_StartTooBig() { Integer[] original = new Integer[5]; ArrayUtils.copyOfRange( original, 8 , 14); } - + @Test(expected=ArrayIndexOutOfBoundsException.class) public void testCopyOfRange_StartTooSmall() { Integer[] original = new Integer[5]; ArrayUtils.copyOfRange( original, -1 , 14); } - + @Test(expected=IllegalArgumentException.class) public void testCopyOfRange_IllegalRange() { Integer[] original = new Integer[5]; ArrayUtils.copyOfRange( original, 5, 0 ); } - + @Test public void testCopyOfRange() { Integer[] original = new Integer[5]; @@ -38,10 +38,10 @@ public class ArrayUtilsTest { } Integer[] copy = ArrayUtils.copyOfRange( original, 0, 0 ); assertEquals( 0, copy.length ); - + copy = ArrayUtils.copyOfRange( original, 2, 2 ); assertEquals( 0, copy.length ); - + copy = ArrayUtils.copyOfRange( original, 0, 2 ); assertEquals( 2, copy.length ); for( int i =0; i< 2; i++ ) { @@ -71,7 +71,7 @@ public class ArrayUtilsTest { Integer[] copy = ArrayUtils.copyOfRange( original, 0, 0 ); assertEquals( 0, copy.length ); - + copy = ArrayUtils.copyOfRange( original, 0, 2 ); assertEquals( 2, copy.length ); for( int i =0; i< 2; i++ ) { @@ -79,6 +79,40 @@ public class ArrayUtilsTest { } } + + @Test + public void testRange1() { + double[] ary = ArrayUtils.range(0.0, 0.5, 1.0); + assertEquals(1, ary.length); + assertEquals( 0.0, ary[0], 0.0 ); + } + + @Test + public void testRange2() { + double[] ary = ArrayUtils.range(0.0, 1.0, 0.5); + assertEquals(2, ary.length); + assertEquals( 0.0, ary[0], 0.0 ); + assertEquals( 0.5, ary[1], 0.0 ); + } + @Test + public void testRange3() { + double [] ary = ArrayUtils.range(0.0, 1.0, 0.4 ); + assertEquals(3, ary.length); + assertEquals( 0.0, ary[0], 0.0 ); + assertEquals( 0.4, ary[1], 0.0 ); + assertEquals( 0.8, ary[2], 0.0 ); + } + @Test + public void testRange4() { + double[] ary = ArrayUtils.range(0.0,10.0, 0.5); + assertEquals( 20, ary.length ); + int i =0; + for( double d = 0.0; d < 10.0; d+=0.5){ + assertEquals(d,ary[i++],0.0); + } + assertEquals( i, ary.length ); + } + }