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);


Reply via email to