Author: srowen
Date: Wed Nov 28 09:53:56 2012
New Revision: 1414618

URL: http://svn.apache.org/viewvc?rev=1414618&view=rev
Log:
Oops, fix tests for last change to sampling

Modified:
    
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/common/SamplingLongPrimitiveIterator.java
    
mahout/trunk/core/src/main/java/org/apache/mahout/common/iterator/SamplingIterator.java
    
mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/common/SamplingLongPrimitiveIteratorTest.java
    
mahout/trunk/core/src/test/java/org/apache/mahout/common/iterator/TestSamplingIterator.java

Modified: 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/common/SamplingLongPrimitiveIterator.java
URL: 
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/common/SamplingLongPrimitiveIterator.java?rev=1414618&r1=1414617&r2=1414618&view=diff
==============================================================================
--- 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/common/SamplingLongPrimitiveIterator.java
 (original)
+++ 
mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/common/SamplingLongPrimitiveIterator.java
 Wed Nov 28 09:53:56 2012
@@ -19,6 +19,7 @@ package org.apache.mahout.cf.taste.impl.
 
 import java.util.NoSuchElementException;
 
+import com.google.common.base.Preconditions;
 import org.apache.commons.math.MathException;
 import org.apache.commons.math.distribution.PascalDistributionImpl;
 
@@ -34,6 +35,8 @@ public final class SamplingLongPrimitive
   private boolean hasNext;
   
   public SamplingLongPrimitiveIterator(LongPrimitiveIterator delegate, double 
samplingRate) {
+    Preconditions.checkNotNull(delegate);
+    Preconditions.checkArgument(samplingRate > 0.0 && samplingRate <= 1.0);
     // Geometric distribution is special case of negative binomial (aka 
Pascal) with r=1:
     geometricDistribution = new PascalDistributionImpl(1, samplingRate);
     this.delegate = delegate;

Modified: 
mahout/trunk/core/src/main/java/org/apache/mahout/common/iterator/SamplingIterator.java
URL: 
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/common/iterator/SamplingIterator.java?rev=1414618&r1=1414617&r2=1414618&view=diff
==============================================================================
--- 
mahout/trunk/core/src/main/java/org/apache/mahout/common/iterator/SamplingIterator.java
 (original)
+++ 
mahout/trunk/core/src/main/java/org/apache/mahout/common/iterator/SamplingIterator.java
 Wed Nov 28 09:53:56 2012
@@ -19,6 +19,7 @@ package org.apache.mahout.common.iterato
 
 import java.util.Iterator;
 
+import com.google.common.base.Preconditions;
 import com.google.common.collect.AbstractIterator;
 import org.apache.commons.math.MathException;
 import org.apache.commons.math.distribution.PascalDistributionImpl;
@@ -34,6 +35,8 @@ public final class SamplingIterator<T> e
   private final Iterator<? extends T> delegate;
 
   public SamplingIterator(Iterator<? extends T> delegate, double samplingRate) 
{
+    Preconditions.checkNotNull(delegate);
+    Preconditions.checkArgument(samplingRate > 0.0 && samplingRate <= 1.0);
     // Geometric distribution is special case of negative binomial (aka 
Pascal) with r=1:
     geometricDistribution = new PascalDistributionImpl(1, samplingRate);
     this.delegate = delegate;

Modified: 
mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/common/SamplingLongPrimitiveIteratorTest.java
URL: 
http://svn.apache.org/viewvc/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/common/SamplingLongPrimitiveIteratorTest.java?rev=1414618&r1=1414617&r2=1414618&view=diff
==============================================================================
--- 
mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/common/SamplingLongPrimitiveIteratorTest.java
 (original)
+++ 
mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/common/SamplingLongPrimitiveIteratorTest.java
 Wed Nov 28 09:53:56 2012
@@ -20,40 +20,70 @@ package org.apache.mahout.cf.taste.impl.
 import org.apache.mahout.cf.taste.impl.TasteTestCase;
 import org.junit.Test;
 
-import java.util.NoSuchElementException;
-
 public final class SamplingLongPrimitiveIteratorTest extends TasteTestCase {
 
-  @Test(expected = NoSuchElementException.class)
-  public void testEmpty() {
-    LongPrimitiveArrayIterator it = new LongPrimitiveArrayIterator(new 
long[0]);
-    LongPrimitiveIterator sample = new SamplingLongPrimitiveIterator(it, 0.5);
-    assertFalse(sample.hasNext());
-    sample.next();
-  }
-
-  @Test(expected = NoSuchElementException.class)
-  public void testNext() {
-    LongPrimitiveArrayIterator it = new LongPrimitiveArrayIterator(new long[] 
{5,4,3,2,1});
-    LongPrimitiveIterator sample = new SamplingLongPrimitiveIterator(it, 0.5);
-    assertTrue(sample.hasNext());
-    assertEquals(4, (long) sample.next());
-    assertTrue(sample.hasNext());
-    assertEquals(2, sample.nextLong());
-    assertTrue(sample.hasNext());
-    assertEquals(1, (long) sample.next());
-    assertFalse(sample.hasNext());
-    it.nextLong();
+  @Test
+  public void testEmptyCase() {
+    assertFalse(new SamplingLongPrimitiveIterator(
+        countingIterator(0), 0.9999).hasNext());
+    assertFalse(new SamplingLongPrimitiveIterator(
+        countingIterator(0), 1).hasNext());
+  }
+
+  @Test
+  public void testSmallInput() {
+    SamplingLongPrimitiveIterator t = new SamplingLongPrimitiveIterator(
+        countingIterator(1), 0.9999);
+    assertTrue(t.hasNext());
+    assertEquals(0L, t.nextLong());
+    assertFalse(t.hasNext());
+  }
+
+  @Test(expected = IllegalArgumentException.class)
+  public void testBadRate1() {
+    new SamplingLongPrimitiveIterator(countingIterator(1), 0.0);
+  }
+
+  @Test(expected = IllegalArgumentException.class)
+  public void testBadRate2() {
+    new SamplingLongPrimitiveIterator(countingIterator(1), 1.1);
   }
 
   @Test
-  public void testPeekSkip() {
-    LongPrimitiveArrayIterator it = new LongPrimitiveArrayIterator(new long[] 
{8,7,6,5,4,3,2,1});
-    LongPrimitiveIterator sample = new SamplingLongPrimitiveIterator(it, 0.5);
-    assertEquals(7, sample.peek());
-    sample.skip(1);
-    assertEquals(4, sample.peek());
-    assertTrue(sample.hasNext());
+  public void testExactSizeMatch() {
+    SamplingLongPrimitiveIterator t = new SamplingLongPrimitiveIterator(
+        countingIterator(10), 1);
+    for (int i = 0; i < 10; i++) {
+      assertTrue(t.hasNext());
+      assertEquals(i, t.next().intValue());
+    }
+    assertFalse(t.hasNext());
+  }
+
+  @Test
+  public void testSample() {
+    for (int i = 0; i < 1000; i++) {
+      SamplingLongPrimitiveIterator t = new SamplingLongPrimitiveIterator(
+          countingIterator(1000), 0.1);
+      int k = 0;
+      while (t.hasNext()) {
+        long v = t.nextLong();
+        k++;
+        assertTrue(v >= 0L);
+        assertTrue(v < 1000L);
+      }
+      double sd = Math.sqrt(0.9 * 0.1 * 1000);
+      assertTrue(k >= 100 - 4 * sd);
+      assertTrue(k <= 100 + 4 * sd);
+    }
+  }
+
+  private static LongPrimitiveArrayIterator countingIterator(int to) {
+    long[] data = new long[to];
+    for (int i = 0; i < to; i++) {
+      data[i] = i;
+    }
+    return new LongPrimitiveArrayIterator(data);
   }
 
 }
\ No newline at end of file

Modified: 
mahout/trunk/core/src/test/java/org/apache/mahout/common/iterator/TestSamplingIterator.java
URL: 
http://svn.apache.org/viewvc/mahout/trunk/core/src/test/java/org/apache/mahout/common/iterator/TestSamplingIterator.java?rev=1414618&r1=1414617&r2=1414618&view=diff
==============================================================================
--- 
mahout/trunk/core/src/test/java/org/apache/mahout/common/iterator/TestSamplingIterator.java
 (original)
+++ 
mahout/trunk/core/src/test/java/org/apache/mahout/common/iterator/TestSamplingIterator.java
 Wed Nov 28 09:53:56 2012
@@ -28,7 +28,6 @@ public final class TestSamplingIterator 
   public void testEmptyCase() {
     assertFalse(new SamplingIterator<Integer>(new CountingIterator(0), 
0.9999).hasNext());
     assertFalse(new SamplingIterator<Integer>(new CountingIterator(0), 
1).hasNext());
-    assertFalse(new SamplingIterator<Integer>(new CountingIterator(0), 
2).hasNext());
   }
 
   @Test
@@ -39,10 +38,14 @@ public final class TestSamplingIterator 
     assertFalse(t.hasNext());
   }
 
-  @Test
-  public void testAbsurdSampleRate() {
-    Iterator<Integer> t = new SamplingIterator<Integer>(new 
CountingIterator(2), 0);
-    assertFalse(t.hasNext());
+  @Test(expected = IllegalArgumentException.class)
+  public void testBadRate1() {
+    new SamplingIterator<Integer>(new CountingIterator(1), 0.0);
+  }
+
+  @Test(expected = IllegalArgumentException.class)
+  public void testBadRate2() {
+    new SamplingIterator<Integer>(new CountingIterator(1), 1.1);
   }
 
   @Test
@@ -57,7 +60,7 @@ public final class TestSamplingIterator 
 
   @Test
   public void testSample() {
-    for (int i = 0; i < 100; i++) {
+    for (int i = 0; i < 1000; i++) {
       Iterator<Integer> t = new SamplingIterator<Integer>(new 
CountingIterator(1000), 0.1);
       int k = 0;
       while (t.hasNext()) {
@@ -67,8 +70,8 @@ public final class TestSamplingIterator 
         assertTrue(v < 1000);
       }
       double sd = Math.sqrt(0.9 * 0.1 * 1000);
-      assertTrue(k >= 100 - 3 * sd);
-      assertTrue(k <= 100 + 3 * sd);
+      assertTrue(k >= 100 - 4 * sd);
+      assertTrue(k <= 100 + 4 * sd);
     }
   }
 }


Reply via email to