Author: tdunning
Date: Mon Jan 31 03:40:51 2011
New Revision: 1065477
URL: http://svn.apache.org/viewvc?rev=1065477&view=rev
Log:
MAHOUT-600 - Improves floating point comparison in logNormalize test. Also
improves javadoc for normalize.
Modified:
mahout/trunk/math/src/main/java/org/apache/mahout/math/Vector.java
mahout/trunk/math/src/test/java/org/apache/mahout/math/VectorTest.java
Modified: mahout/trunk/math/src/main/java/org/apache/mahout/math/Vector.java
URL:
http://svn.apache.org/viewvc/mahout/trunk/math/src/main/java/org/apache/mahout/math/Vector.java?rev=1065477&r1=1065476&r2=1065477&view=diff
==============================================================================
--- mahout/trunk/math/src/main/java/org/apache/mahout/math/Vector.java
(original)
+++ mahout/trunk/math/src/main/java/org/apache/mahout/math/Vector.java Mon Jan
31 03:40:51 2011
@@ -219,7 +219,7 @@ public interface Vector extends Cloneabl
*
* @param power The power to use. Must be >= 0. May also be {@link
Double#POSITIVE_INFINITY}. See the Wikipedia link
* for more on this.
- * @return a new Vector
+ * @return a new Vector x such that norm(x, power) == 1
*/
Vector normalize(double power);
Modified: mahout/trunk/math/src/test/java/org/apache/mahout/math/VectorTest.java
URL:
http://svn.apache.org/viewvc/mahout/trunk/math/src/test/java/org/apache/mahout/math/VectorTest.java?rev=1065477&r1=1065476&r2=1065477&view=diff
==============================================================================
--- mahout/trunk/math/src/test/java/org/apache/mahout/math/VectorTest.java
(original)
+++ mahout/trunk/math/src/test/java/org/apache/mahout/math/VectorTest.java Mon
Jan 31 03:40:51 2011
@@ -499,44 +499,49 @@ public final class VectorTest extends Ma
vec2.setQuick(2, 3);
Vector norm2 = vec2.logNormalize();
assertNotNull("norm1 is null and it shouldn't be", norm2);
-
- Vector expected = new RandomAccessSparseVector(3);
-
- expected.setQuick(0, 0.2672612419124244);
- expected.setQuick(1, 0.4235990463273581);
- expected.setQuick(2, 0.5345224838248488);
-
- assertEquals(expected, norm);
-
+
+ Vector expected = new DenseVector(new double[]{
+ 0.2672612419124244, 0.4235990463273581, 0.5345224838248488
+ });
+
+ assertVectorEquals(expected, norm, 1e-16);
+ assertVectorEquals(expected, norm2, 1e-16);
+
norm = vec1.logNormalize(2);
- assertEquals(expected, norm);
+ assertVectorEquals(expected, norm, 1e-16);
norm2 = vec2.logNormalize(2);
- assertEquals(expected, norm2);
+ assertVectorEquals(expected, norm2, 1e-16);
try {
- norm = vec1.logNormalize(1);
- fail();
+ vec1.logNormalize(1);
+ fail("Should fail with power == 1");
} catch (IllegalArgumentException e) {
// expected
}
- norm = vec1.logNormalize(3);
-
+
try {
vec1.logNormalize(-1);
- fail();
+ fail("Should fail with negative power");
} catch (IllegalArgumentException e) {
// expected
}
try {
- vec2.logNormalize(Double.POSITIVE_INFINITY);
- fail();
+ norm = vec2.logNormalize(Double.POSITIVE_INFINITY);
+ fail("Should fail with positive infinity norm");
} catch (IllegalArgumentException e) {
// expected
}
}
+ private void assertVectorEquals(Vector expected, Vector actual, double
epsilon) {
+ assertEquals(expected.size(), actual.size());
+ for (Vector.Element x : expected) {
+ assertEquals(x.get(), actual.get(x.index()), epsilon);
+ }
+ }
+
@Test
public void testMax() {
Vector vec1 = new RandomAccessSparseVector(3);