You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by si...@apache.org on 2012/05/31 18:12:41 UTC

svn commit: r1344796 - in /commons/proper/functor/trunk/src: changes/ main/java/org/apache/commons/functor/core/algorithm/ test/java/org/apache/commons/functor/ test/java/org/apache/commons/functor/core/algorithm/

Author: simonetripodi
Date: Thu May 31 16:12:39 2012
New Revision: 1344796

URL: http://svn.apache.org/viewvc?rev=1344796&view=rev
Log:
[FUNCTOR-15] Distribute tests from TestAlgorithms into several test classes under algorithm test package - patch submitted by Bruno P. Kinoshita

Added:
    commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/
    commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestDoUntil.java   (with props)
    commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestDoWhile.java   (with props)
    commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestFindWithinGenerator.java   (with props)
    commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestFoldLeft.java   (with props)
    commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestFoldRight.java   (with props)
    commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestGeneratorContains.java   (with props)
    commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestInPlaceTransform.java   (with props)
    commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestIndexOfInGenerator.java   (with props)
    commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestRecursiveEvaluation.java   (with props)
    commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestRemoveMatching.java   (with props)
    commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestRetainMatching.java   (with props)
    commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestUntilDo.java   (with props)
    commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestWhileDo.java   (with props)
Modified:
    commons/proper/functor/trunk/src/changes/changes.xml
    commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/DoUntil.java
    commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/DoWhile.java
    commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/FindWithinGenerator.java
    commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/FoldLeft.java
    commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/FoldRight.java
    commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/GeneratorContains.java
    commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/InPlaceTransform.java
    commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/IndexOfInGenerator.java
    commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/RecursiveEvaluation.java
    commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/RemoveMatching.java
    commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/RetainMatching.java
    commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/UntilDo.java
    commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/WhileDo.java
    commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/TestAlgorithms.java

Modified: commons/proper/functor/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/changes/changes.xml?rev=1344796&r1=1344795&r2=1344796&view=diff
==============================================================================
--- commons/proper/functor/trunk/src/changes/changes.xml (original)
+++ commons/proper/functor/trunk/src/changes/changes.xml Thu May 31 16:12:39 2012
@@ -26,6 +26,9 @@
       <action dev="simonetripodi" issue="FUNCTOR-16" due-to="Bruno P. Kinoshita">
         Fix checkstyle errors
       </action>
+      <action dev="simonetripodi" issue="FUNCTOR-15" due-to="Bruno P. Kinoshita">
+        Distribute tests from TestAlgorithms into several test classes under algorithm test package
+      </action>
       <action dev="simonetripodi" issue="FUNCTOR-9" due-to="Bruno P. Kinoshita">
         Make Limit and Offset Serializable
       </action>

Modified: commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/DoUntil.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/DoUntil.java?rev=1344796&r1=1344795&r2=1344796&view=diff
==============================================================================
--- commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/DoUntil.java (original)
+++ commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/DoUntil.java Thu May 31 16:12:39 2012
@@ -48,4 +48,12 @@ public class DoUntil extends PredicatedL
             getBody().run();
         } while (!getTest().test());
     }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String toString() {
+        return "DoUntil<" + getBody() + "," + getTest() + ">";
+    }
 }

Modified: commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/DoWhile.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/DoWhile.java?rev=1344796&r1=1344795&r2=1344796&view=diff
==============================================================================
--- commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/DoWhile.java (original)
+++ commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/DoWhile.java Thu May 31 16:12:39 2012
@@ -48,4 +48,12 @@ public class DoWhile extends PredicatedL
             getBody().run();
         } while (getTest().test());
     }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String toString() {
+        return "DoWhile<" + getBody() + "," + getTest() + ">";
+    }
 }

Modified: commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/FindWithinGenerator.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/FindWithinGenerator.java?rev=1344796&r1=1344795&r2=1344796&view=diff
==============================================================================
--- commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/FindWithinGenerator.java (original)
+++ commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/FindWithinGenerator.java Thu May 31 16:12:39 2012
@@ -157,6 +157,14 @@ public final class FindWithinGenerator<E
     }
 
     /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String toString() {
+        return "FindWithinGenerator<" + ifNone + "," + useIfNone + ">";
+    }
+
+    /**
      * Get a static {@link FindWithinGenerator} instance.
      * @return {@link FindWithinGenerator}
      */

Modified: commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/FoldLeft.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/FoldLeft.java?rev=1344796&r1=1344795&r2=1344796&view=diff
==============================================================================
--- commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/FoldLeft.java (original)
+++ commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/FoldLeft.java Thu May 31 16:12:39 2012
@@ -157,4 +157,12 @@ public class FoldLeft<T> implements Unar
         return "FoldLeft".hashCode() << 2 ^ function.hashCode();
     }
 
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String toString() {
+        return "FoldLeft<" + function + ">";
+    }
+
 }

Modified: commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/FoldRight.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/FoldRight.java?rev=1344796&r1=1344795&r2=1344796&view=diff
==============================================================================
--- commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/FoldRight.java (original)
+++ commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/FoldRight.java Thu May 31 16:12:39 2012
@@ -168,4 +168,12 @@ public class FoldRight<T> implements Una
         return "FoldRight".hashCode() << 2 ^ function.hashCode();
     }
 
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String toString() {
+        return "FoldRight<" + function + ">";
+    }
+
 }

Modified: commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/GeneratorContains.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/GeneratorContains.java?rev=1344796&r1=1344795&r2=1344796&view=diff
==============================================================================
--- commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/GeneratorContains.java (original)
+++ commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/GeneratorContains.java Thu May 31 16:12:39 2012
@@ -100,6 +100,14 @@ public final class GeneratorContains<T> 
     }
 
     /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String toString() {
+        return "GeneratorContains";
+    }
+
+    /**
      * Get a static {@link GeneratorContains} instance.
      * @return {@link GeneratorContains}
      */

Modified: commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/InPlaceTransform.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/InPlaceTransform.java?rev=1344796&r1=1344795&r2=1344796&view=diff
==============================================================================
--- commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/InPlaceTransform.java (original)
+++ commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/InPlaceTransform.java Thu May 31 16:12:39 2012
@@ -67,6 +67,14 @@ public final class InPlaceTransform<T>
     }
 
     /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String toString() {
+        return "InPlaceTransform";
+    }
+
+    /**
      * Get an {@link InPlaceTransform} instance.
      * @return InPlaceTransform
      */

Modified: commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/IndexOfInGenerator.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/IndexOfInGenerator.java?rev=1344796&r1=1344795&r2=1344796&view=diff
==============================================================================
--- commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/IndexOfInGenerator.java (original)
+++ commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/IndexOfInGenerator.java Thu May 31 16:12:39 2012
@@ -115,6 +115,14 @@ public final class IndexOfInGenerator<T>
     }
 
     /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String toString() {
+        return "IndexOfInGenerator";
+    }
+
+    /**
      * Get a static {@link IndexOfInGenerator} instance.
      * @return {@link IndexOfInGenerator}
      */

Modified: commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/RecursiveEvaluation.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/RecursiveEvaluation.java?rev=1344796&r1=1344795&r2=1344796&view=diff
==============================================================================
--- commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/RecursiveEvaluation.java (original)
+++ commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/RecursiveEvaluation.java Thu May 31 16:12:39 2012
@@ -106,6 +106,14 @@ public class RecursiveEvaluation impleme
     }
 
     /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String toString() {
+        return "RecursiveEvaluation<" + functionType + "," + function + ">";
+    }
+
+    /**
      * Get the class of the specified object, or <code>null</code> if <code>o</code> is <code>null</code>.
      * @param f Object to check
      * @return Class found

Modified: commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/RemoveMatching.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/RemoveMatching.java?rev=1344796&r1=1344795&r2=1344796&view=diff
==============================================================================
--- commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/RemoveMatching.java (original)
+++ commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/RemoveMatching.java Thu May 31 16:12:39 2012
@@ -69,6 +69,14 @@ public final class RemoveMatching<T>
     }
 
     /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String toString() {
+        return "RemoveMatching";
+    }
+
+    /**
      * Get a static {@link RemoveMatching} instance.
      * @return {@link RemoveMatching}
      */

Modified: commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/RetainMatching.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/RetainMatching.java?rev=1344796&r1=1344795&r2=1344796&view=diff
==============================================================================
--- commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/RetainMatching.java (original)
+++ commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/RetainMatching.java Thu May 31 16:12:39 2012
@@ -70,6 +70,14 @@ public final class RetainMatching<T>
     }
 
     /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String toString() {
+        return "RetainMatching";
+    }
+
+    /**
      * Get a static {@link RetainMatching} instance.
      * @return {@link RetainMatching}
      */

Modified: commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/UntilDo.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/UntilDo.java?rev=1344796&r1=1344795&r2=1344796&view=diff
==============================================================================
--- commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/UntilDo.java (original)
+++ commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/UntilDo.java Thu May 31 16:12:39 2012
@@ -48,4 +48,12 @@ public class UntilDo extends PredicatedL
             getBody().run();
         }
     }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String toString() {
+        return "UntilDo<" + getTest() + "," + getBody() + ">";
+    }
 }

Modified: commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/WhileDo.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/WhileDo.java?rev=1344796&r1=1344795&r2=1344796&view=diff
==============================================================================
--- commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/WhileDo.java (original)
+++ commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/core/algorithm/WhileDo.java Thu May 31 16:12:39 2012
@@ -48,4 +48,12 @@ public class WhileDo extends PredicatedL
             getBody().run();
         }
     }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String toString() {
+        return "WhileDo<" + getTest() + "," + getBody() + ">";
+    }
 }

Modified: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/TestAlgorithms.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/TestAlgorithms.java?rev=1344796&r1=1344795&r2=1344796&view=diff
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/TestAlgorithms.java (original)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/TestAlgorithms.java Thu May 31 16:12:39 2012
@@ -17,37 +17,20 @@
 package org.apache.commons.functor;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
 
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
-import java.util.NoSuchElementException;
 import java.util.Set;
 
 import org.apache.commons.functor.adapter.LeftBoundPredicate;
 import org.apache.commons.functor.core.Identity;
 import org.apache.commons.functor.core.IsEqual;
-import org.apache.commons.functor.core.Limit;
-import org.apache.commons.functor.core.Offset;
-import org.apache.commons.functor.core.algorithm.DoUntil;
-import org.apache.commons.functor.core.algorithm.DoWhile;
-import org.apache.commons.functor.core.algorithm.FindWithinGenerator;
-import org.apache.commons.functor.core.algorithm.FoldLeft;
-import org.apache.commons.functor.core.algorithm.FoldRight;
-import org.apache.commons.functor.core.algorithm.GeneratorContains;
-import org.apache.commons.functor.core.algorithm.InPlaceTransform;
-import org.apache.commons.functor.core.algorithm.RecursiveEvaluation;
-import org.apache.commons.functor.core.algorithm.RemoveMatching;
-import org.apache.commons.functor.core.algorithm.RetainMatching;
-import org.apache.commons.functor.core.algorithm.UntilDo;
-import org.apache.commons.functor.core.algorithm.WhileDo;
 import org.apache.commons.functor.core.composite.UnaryNot;
 import org.apache.commons.functor.generator.FilteredGenerator;
 import org.apache.commons.functor.generator.Generator;
@@ -98,22 +81,7 @@ public class TestAlgorithms {
     // Tests
     // ------------------------------------------------------------------------
 
-    @Test
-    public void testDetect() {
-        assertEquals(new Integer(3),FindWithinGenerator.instance().evaluate(IteratorToGeneratorAdapter.adapt(list.iterator()),equalsThree));
-        try {
-            FindWithinGenerator.instance().evaluate(IteratorToGeneratorAdapter.adapt(list.iterator()),equalsTwentyThree);
-            fail("Expected NoSuchElementException");
-        } catch(NoSuchElementException e) {
-            // expected
-        }
-    }
-
-    @Test
-    public void testDetectIfNone() {
-        assertEquals(new Integer(3),new FindWithinGenerator("Xyzzy").evaluate(IteratorToGeneratorAdapter.adapt(list.iterator()),equalsThree));
-        assertEquals("Xyzzy",new FindWithinGenerator("Xyzzy").evaluate(IteratorToGeneratorAdapter.adapt(list.iterator()),equalsTwentyThree));
-    }
+    
 
     @Test
     public void testRun() {
@@ -151,31 +119,6 @@ public class TestAlgorithms {
     }
 
     @Test
-    public void testRetain() {
-        RetainMatching.instance().run(list.iterator(),isEven);
-        assertEquals(evens,list);
-    }
-
-    @Test
-    public void testRemove() {
-        RemoveMatching.instance().run(list.iterator(),isOdd);
-        assertEquals(evens,list);
-    }
-
-    @Test
-    public void testTransform() {
-        InPlaceTransform.instance().run(
-            list.listIterator(),
-            new UnaryFunction() {
-                public Object evaluate(Object obj) {
-                    return new Integer(((Number) obj).intValue()*2);
-                }
-            }
-        );
-        assertEquals(doubled,list);
-    }
-
-    @Test
     public void testApplyToGenerator() {
         Generator gen = new IntegerRange(1,5);
         Summer summer = new Summer();
@@ -215,107 +158,6 @@ public class TestAlgorithms {
         }
     }
 
-    @Test
-    public void testContains() {
-        assertTrue(GeneratorContains.instance().test(IteratorToGeneratorAdapter.adapt(list.iterator()),equalsThree));
-        assertFalse(GeneratorContains.instance().test(IteratorToGeneratorAdapter.adapt(list.iterator()),equalsTwentyThree));
-    }
-
-    @Test
-    public void testFoldLeft() {
-        FoldLeft foldLeft = new FoldLeft(new BinaryFunction() {
-            public Object evaluate(Object a, Object b) {
-                return new Integer(((Number) a).intValue() + ((Number) b).intValue());
-            }
-        });
-        assertEquals(new Integer(sum), foldLeft.evaluate(IteratorToGeneratorAdapter.adapt(list.iterator())));
-        assertEquals(new Integer(sum), foldLeft.evaluate(IteratorToGeneratorAdapter.adapt(list.iterator()), new Integer(0)));
-    }
-
-    @Test
-    public void testFoldRight() {
-        FoldRight foldRight = new FoldRight(new BinaryFunction() {
-            public Object evaluate(Object left, Object right) {
-                StringBuffer buf = left instanceof StringBuffer ? (StringBuffer) left : new StringBuffer().append(left);
-                return buf.append(right);
-            }
-        });
-        assertEquals("0123456789", foldRight.evaluate(IteratorToGeneratorAdapter.adapt(list.iterator())).toString());
-        assertEquals("0123456789x", foldRight.evaluate(IteratorToGeneratorAdapter.adapt(list.iterator()), "x").toString());
-    }
-
-    @Test
-    public void testDoUntil() {
-        for (int i=0;i<3;i++){
-            Counter counter = new Counter();
-            new DoUntil(counter, new Offset(i)).run();
-            assertEquals(i+1,counter.count);
-        }
-    }
-
-    @Test
-    public void testDoWhile() {
-        for (int i=0;i<3;i++){
-            Counter counter = new Counter();
-            new DoWhile(counter, new Limit(i)).run();
-            assertEquals(i+1,counter.count);
-        }
-    }
-
-    @Test
-    public void testUntilDo() {
-        for (int i=0;i<3;i++){
-            Counter counter = new Counter();
-            new UntilDo(new Offset(i), counter).run();
-            assertEquals(i,counter.count);
-        }
-    }
-
-    @Test
-    public void testWhileDo() {
-        for (int i=0;i<3;i++){
-            Counter counter = new Counter();
-            new WhileDo(new Limit(i),counter).run();
-            assertEquals(i,counter.count);
-        }
-    }
-
-    @Test
-    public void testRecurse() {
-        assertEquals(new Integer(5), new RecursiveEvaluation(new RecFunc(0, false)).evaluate());
-
-        // this version will return a function. since it is not the same type
-        // as RecFunc recursion will end.
-        Function func = (Function) new RecursiveEvaluation(new RecFunc(0, true)).evaluate();
-        assertEquals(new Integer(5), func.evaluate());
-    }
-
-    /** Recursive function for test. */
-    class RecFunc implements Function {
-        int times = 0; boolean returnFunc = false;
-
-        public RecFunc(int times, boolean returnFunc) {
-            this.times = times;
-            this.returnFunc = returnFunc;
-        }
-
-        public Object evaluate() {
-            if (times < 5) {
-                return new RecFunc(++times, returnFunc);
-            } else {
-                if (returnFunc) {
-                    return new Function() {
-                        public Object evaluate() {
-                            return new Integer(times);
-                        }
-                    };
-                } else {
-                    return new Integer(times);
-                }
-            }
-        }
-    }
-
     // Attributes
     // ------------------------------------------------------------------------
     private List list = null;

Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestDoUntil.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestDoUntil.java?rev=1344796&view=auto
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestDoUntil.java (added)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestDoUntil.java Thu May 31 16:12:39 2012
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.functor.core.algorithm;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.commons.functor.Procedure;
+import org.apache.commons.functor.core.Offset;
+import org.apache.commons.functor.core.algorithm.DoUntil;
+import org.junit.Test;
+
+/**
+ * Tests {@link DoUntil} algorithm.
+ */
+public class TestDoUntil {
+
+    @Test
+    public final void testObjectEquals() throws Exception {
+        Counter counter = new Counter();
+        Object obj = new DoUntil(counter, new Offset(10));
+        assertEquals("equals must be reflexive",obj,obj);
+        assertEquals("hashCode must be reflexive",obj.hashCode(),obj.hashCode());
+        assertTrue(! obj.equals(null) ); // should be able to compare to null
+
+        Object obj2 = new DoUntil(counter, new Offset(10));
+        if (obj.equals(obj2)) {
+            assertEquals("equals implies hash equals",obj.hashCode(),obj2.hashCode());
+            assertEquals("equals must be symmetric",obj2,obj);
+        } else {
+            assertTrue("equals must be symmetric",! obj2.equals(obj));
+        }
+    }
+
+    @Test
+    public void testDoUntil() {
+        for(int i=0;i<3;++i){
+            Counter counter = new Counter();
+            new DoUntil(counter, new Offset(i)).run();
+            assertEquals(i+1,counter.count);
+        }
+    }
+
+    // Classes
+    // ------------------------------------------------------------------------
+
+    static class Counter implements Procedure {
+        public void run() {
+            count++;
+        }
+        public int count = 0;
+    }
+
+}

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestDoUntil.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestDoUntil.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestDoUntil.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestDoWhile.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestDoWhile.java?rev=1344796&view=auto
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestDoWhile.java (added)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestDoWhile.java Thu May 31 16:12:39 2012
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.functor.core.algorithm;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.commons.functor.Procedure;
+import org.apache.commons.functor.core.Limit;
+import org.apache.commons.functor.core.algorithm.DoWhile;
+import org.junit.Test;
+
+/**
+ * Tests {@link DoWhile} algorithm.
+ */
+public class TestDoWhile {
+
+    @Test
+    public final void testObjectEquals() throws Exception {
+        Counter counter = new Counter();
+        Object obj = new DoWhile(counter, new Limit(10));
+        assertEquals("equals must be reflexive",obj,obj);
+        assertEquals("hashCode must be reflexive",obj.hashCode(),obj.hashCode());
+        assertTrue(! obj.equals(null) ); // should be able to compare to null
+
+        Object obj2 = new DoWhile(counter, new Limit(10));
+        if (obj.equals(obj2)) {
+            assertEquals("equals implies hash equals",obj.hashCode(),obj2.hashCode());
+            assertEquals("equals must be symmetric",obj2,obj);
+        } else {
+            assertTrue("equals must be symmetric",! obj2.equals(obj));
+        }
+    }
+
+    @Test
+    public void testDoWhile() {
+        for(int i=0;i<3;i++){
+            Counter counter = new Counter();
+            new DoWhile(counter, new Limit(i)).run();
+            assertEquals(i+1,counter.count);
+        }
+    }
+
+    // Classes
+    // ------------------------------------------------------------------------
+
+    static class Counter implements Procedure {
+        public void run() {
+            count++;
+        }
+        public int count = 0;
+    }
+
+}

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestDoWhile.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestDoWhile.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestDoWhile.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestFindWithinGenerator.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestFindWithinGenerator.java?rev=1344796&view=auto
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestFindWithinGenerator.java (added)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestFindWithinGenerator.java Thu May 31 16:12:39 2012
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.functor.core.algorithm;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+import org.apache.commons.functor.BaseFunctorTest;
+import org.apache.commons.functor.UnaryPredicate;
+import org.apache.commons.functor.adapter.LeftBoundPredicate;
+import org.apache.commons.functor.core.IsEqual;
+import org.apache.commons.functor.core.algorithm.FindWithinGenerator;
+import org.apache.commons.functor.generator.IteratorToGeneratorAdapter;
+import org.junit.Test;
+
+/**
+ * Tests {@link FindWithinGenerator} algorithm.
+ */
+public class TestFindWithinGenerator extends BaseFunctorTest {
+
+    @Override
+    protected Object makeFunctor() throws Exception {
+        return new FindWithinGenerator<Object>();
+    }
+
+    @Test
+    public void testObjectEqualsWithIfNone() throws Exception {
+        Object obj = new FindWithinGenerator<Object>(1);
+        assertEquals("equals must be reflexive",obj,obj);
+        assertEquals("hashCode must be reflexive",obj.hashCode(),obj.hashCode());
+        assertTrue(! obj.equals(null) ); // should be able to compare to null
+
+        Object obj2 = new FindWithinGenerator<Object>(1);
+        if (obj.equals(obj2)) {
+            assertEquals("equals implies hash equals",obj.hashCode(),obj2.hashCode());
+            assertEquals("equals must be symmetric",obj2,obj);
+        } else {
+            assertTrue("equals must be symmetric",! obj2.equals(obj));
+        }
+    }
+
+    @Test
+    public void testObjectEqualsWithNullDefault() throws Exception {
+        Object obj = new FindWithinGenerator<Object>(null);
+        assertEquals("equals must be reflexive",obj,obj);
+        assertEquals("hashCode must be reflexive",obj.hashCode(),obj.hashCode());
+        assertTrue(! obj.equals(null) ); // should be able to compare to null
+
+        Object obj2 = new FindWithinGenerator<Object>(null);
+        if (obj.equals(obj2)) {
+            assertEquals("equals implies hash equals",obj.hashCode(),obj2.hashCode());
+            assertEquals("equals must be symmetric",obj2,obj);
+        } else {
+            assertTrue("equals must be symmetric",! obj2.equals(obj));
+        }
+    }
+
+    @Test
+    public void testDetect() {
+        assertEquals(new Integer(3),new FindWithinGenerator<Integer>().evaluate(IteratorToGeneratorAdapter.adapt(numbers.iterator()),equalsThree));
+        try {
+            new FindWithinGenerator<Integer>().evaluate(IteratorToGeneratorAdapter.adapt(numbers.iterator()),equalsTwentyThree);
+            fail("Expected NoSuchElementException");
+        } catch(NoSuchElementException e) {
+            // expected
+        }
+    }
+
+    @Test
+    public void testDetectIfNone() {
+        assertEquals(new Integer(3),new FindWithinGenerator<Integer>(new Integer(3)).evaluate(IteratorToGeneratorAdapter.adapt(numbers.iterator()),equalsThree));
+        assertEquals("Xyzzy",new FindWithinGenerator<String>("Xyzzy").evaluate(IteratorToGeneratorAdapter.adapt(strings.iterator()),equalsXyZ));
+    }
+
+    @Test
+    public void testInstance() {
+        assertNotNull("FindWithinGenerator instance must not be null", FindWithinGenerator.instance());
+    }
+
+    // Attributes
+    // ------------------------------------------------------------------------
+
+    private List<Integer> numbers = Arrays.asList(0,1,2,3,4,5,6,7,8,9);
+    private List<String> strings = Arrays.asList("Zyx", "xxyZ");
+    private UnaryPredicate<Integer> equalsThree = LeftBoundPredicate.bind(IsEqual.instance(),new Integer(3));
+    private UnaryPredicate<Integer> equalsTwentyThree = LeftBoundPredicate.bind(IsEqual.instance(),new Integer(23));
+    private UnaryPredicate<String> equalsXyZ = LeftBoundPredicate.bind(IsEqual.instance(),"xyZ");
+
+}

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestFindWithinGenerator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestFindWithinGenerator.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestFindWithinGenerator.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestFoldLeft.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestFoldLeft.java?rev=1344796&view=auto
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestFoldLeft.java (added)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestFoldLeft.java Thu May 31 16:12:39 2012
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.functor.core.algorithm;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.commons.functor.BinaryFunction;
+import org.apache.commons.functor.core.algorithm.FoldLeft;
+import org.apache.commons.functor.generator.IteratorToGeneratorAdapter;
+import org.junit.Test;
+
+/**
+ * Tests {@link FoldLeft} algorithm.
+ */
+public class TestFoldLeft {
+
+    @Test
+    public final void testObjectEquals() throws Exception {
+        Object obj = new FoldLeft<Integer>(new BinaryFunction<Integer, Integer, Integer>() {
+            public Integer evaluate(Integer a, Integer b) {
+                return new Integer(a + b);
+            }
+        });
+        assertEquals("equals must be reflexive",obj,obj);
+        assertEquals("hashCode must be reflexive",obj.hashCode(),obj.hashCode());
+        assertTrue(! obj.equals(null) ); // should be able to compare to null
+
+        Object obj2 = new FoldLeft<Integer>(new BinaryFunction<Integer, Integer, Integer>() {
+            public Integer evaluate(Integer a, Integer b) {
+                return new Integer(a + b);
+            }
+        });
+        if (obj.equals(obj2)) {
+            assertEquals("equals implies hash equals",obj.hashCode(),obj2.hashCode());
+            assertEquals("equals must be symmetric",obj2,obj);
+        } else {
+            assertTrue("equals must be symmetric",! obj2.equals(obj));
+        }
+    }
+
+    @Test
+    public void testFoldLeft() {
+        FoldLeft<Integer> foldLeft = new FoldLeft<Integer>(new BinaryFunction<Integer, Integer, Integer>() {
+            public Integer evaluate(Integer a, Integer b) {
+                return new Integer(a + b);
+            }
+        });
+        assertEquals(new Integer(sum), foldLeft.evaluate(IteratorToGeneratorAdapter.adapt(list.iterator())));
+        assertEquals(new Integer(sum), foldLeft.evaluate(IteratorToGeneratorAdapter.adapt(list.iterator()), new Integer(0)));
+    }
+
+    // Attributes
+    // ------------------------------------------------------------------------
+    private List<Integer> list = Arrays.asList(0,1,2);
+    private int sum = 3;
+
+}

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestFoldLeft.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestFoldLeft.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestFoldLeft.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestFoldRight.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestFoldRight.java?rev=1344796&view=auto
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestFoldRight.java (added)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestFoldRight.java Thu May 31 16:12:39 2012
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.functor.core.algorithm;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.commons.functor.BinaryFunction;
+import org.apache.commons.functor.core.algorithm.FoldRight;
+import org.apache.commons.functor.generator.IteratorToGeneratorAdapter;
+import org.junit.Test;
+
+/**
+ * Tests {@link FoldRight} algorithm.
+ */
+public class TestFoldRight {
+
+    @Test
+    public final void testObjectEquals() throws Exception {
+        Object obj = new FoldRight<Object>(new BinaryFunction<Object, Object, Object>() {
+            public Object evaluate(Object left, Object right) {
+                StringBuffer buf = left instanceof StringBuffer ? (StringBuffer) left : new StringBuffer().append(left);
+                return buf.append(right);
+            }
+        });
+        assertEquals("equals must be reflexive",obj,obj);
+        assertEquals("hashCode must be reflexive",obj.hashCode(),obj.hashCode());
+        assertTrue(! obj.equals(null) ); // should be able to compare to null
+
+        Object obj2 = new FoldRight<Object>(new BinaryFunction<Object, Object, Object>() {
+            public Object evaluate(Object left, Object right) {
+                StringBuffer buf = left instanceof StringBuffer ? (StringBuffer) left : new StringBuffer().append(left);
+                return buf.append(right);
+            }
+        });
+        if (obj.equals(obj2)) {
+            assertEquals("equals implies hash equals",obj.hashCode(),obj2.hashCode());
+            assertEquals("equals must be symmetric",obj2,obj);
+        } else {
+            assertTrue("equals must be symmetric",! obj2.equals(obj));
+        }
+    }
+
+    @Test
+    public void testFoldRight() {
+        FoldRight<Object> foldRight = new FoldRight<Object>(new BinaryFunction<Object, Object, Object>() {
+            public Object evaluate(Object left, Object right) {
+                StringBuffer buf = left instanceof StringBuffer ? (StringBuffer) left : new StringBuffer().append(left);
+                return buf.append(right);
+            }
+        });
+        assertEquals("0123456789", foldRight.evaluate(IteratorToGeneratorAdapter.adapt(list.iterator())).toString());
+        assertEquals("0123456789x", foldRight.evaluate(IteratorToGeneratorAdapter.adapt(list.iterator()), "x").toString());
+    }
+
+    // Attributes
+    // ------------------------------------------------------------------------
+    private List<Object> list = Arrays.<Object>asList(0,1,2,3,4,5,6,7,8,9);
+
+}

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestFoldRight.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestFoldRight.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestFoldRight.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestGeneratorContains.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestGeneratorContains.java?rev=1344796&view=auto
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestGeneratorContains.java (added)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestGeneratorContains.java Thu May 31 16:12:39 2012
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.functor.core.algorithm;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.commons.functor.BaseFunctorTest;
+import org.apache.commons.functor.UnaryPredicate;
+import org.apache.commons.functor.adapter.LeftBoundPredicate;
+import org.apache.commons.functor.core.IsEqual;
+import org.apache.commons.functor.core.algorithm.GeneratorContains;
+import org.apache.commons.functor.generator.IteratorToGeneratorAdapter;
+import org.junit.Test;
+
+/**
+ * Tests {@link GeneratorContains} algorithm.
+ */
+public class TestGeneratorContains extends BaseFunctorTest {
+
+    @Override
+    protected Object makeFunctor() throws Exception {
+        return new GeneratorContains<Integer>();
+    }
+
+    @Test
+    public void testContains() {
+        assertTrue(new GeneratorContains<Integer>().test(IteratorToGeneratorAdapter.adapt(list.iterator()),equalsThree));
+        assertFalse(new GeneratorContains<Integer>().test(IteratorToGeneratorAdapter.adapt(list.iterator()),equalsTwentyThree));
+    }
+
+    // Attributes
+    // ------------------------------------------------------------------------
+
+    private List<Integer> list = Arrays.asList(0,1,2,3,4,5,6,7,8,9);
+    private UnaryPredicate<Integer> equalsThree = LeftBoundPredicate.bind(IsEqual.instance(),new Integer(3));
+    private UnaryPredicate<Integer> equalsTwentyThree = LeftBoundPredicate.bind(IsEqual.instance(),new Integer(23));
+
+}

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestGeneratorContains.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestGeneratorContains.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestGeneratorContains.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestInPlaceTransform.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestInPlaceTransform.java?rev=1344796&view=auto
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestInPlaceTransform.java (added)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestInPlaceTransform.java Thu May 31 16:12:39 2012
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.functor.core.algorithm;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.functor.BaseFunctorTest;
+import org.apache.commons.functor.UnaryFunction;
+import org.apache.commons.functor.core.algorithm.InPlaceTransform;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests {@link InPlaceTransform} algorithm.
+ */
+public class TestInPlaceTransform extends BaseFunctorTest {
+
+    // Lifecycle
+    // ------------------------------------------------------------------------
+
+    @Before
+    public void setUp() throws Exception {
+        list = new ArrayList<Integer>();
+        doubled = new ArrayList<Integer>();
+        for (int i=0;i<10;i++) {
+            list.add(new Integer(i));
+            doubled.add(new Integer(i*2));
+        }
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        list = null;
+        doubled = null;
+    }
+
+    // Tests
+    // ------------------------------------------------------------------------
+
+    @Override
+    protected Object makeFunctor() throws Exception {
+        return new InPlaceTransform<Integer>();
+    }
+
+    @Test
+    public void testTransform() {
+        new InPlaceTransform<Integer>().run(
+            list.listIterator(),
+            new UnaryFunction<Integer, Integer>() {
+                public Integer evaluate(Integer obj) {
+                    return new Integer(obj*2);
+                }
+            }
+        );
+        assertEquals(doubled,list);
+    }
+
+    public void testInstance() {
+        assertNotNull("InPlaceTransform must not be null", InPlaceTransform.instance());
+    }
+
+    // Attributes
+    // ------------------------------------------------------------------------
+    private List<Integer> list = null;
+    private List<Integer> doubled = null;
+
+    // Classes
+    // ------------------------------------------------------------------------
+
+    static class Doubler implements UnaryFunction<Integer, Integer> {
+        public Integer evaluate(Integer obj) {
+            return new Integer(2*obj);
+        }
+    }
+
+}

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestInPlaceTransform.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestInPlaceTransform.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestInPlaceTransform.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestIndexOfInGenerator.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestIndexOfInGenerator.java?rev=1344796&view=auto
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestIndexOfInGenerator.java (added)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestIndexOfInGenerator.java Thu May 31 16:12:39 2012
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.functor.core.algorithm;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.commons.functor.BaseFunctorTest;
+import org.apache.commons.functor.UnaryPredicate;
+import org.apache.commons.functor.adapter.LeftBoundPredicate;
+import org.apache.commons.functor.core.IsEqual;
+import org.apache.commons.functor.core.algorithm.IndexOfInGenerator;
+import org.apache.commons.functor.generator.IteratorToGeneratorAdapter;
+import org.junit.Test;
+
+/**
+ * Tests {@link IndexOfInGenerator} algorithm.
+ */
+public class TestIndexOfInGenerator extends BaseFunctorTest {
+
+    @Override
+    protected Object makeFunctor() throws Exception {
+        return new IndexOfInGenerator<Integer>();
+    }
+
+    @Test
+    public void testIndexOfInGenerator() {
+        assertEquals(3L, new IndexOfInGenerator<Integer>().evaluate(IteratorToGeneratorAdapter.adapt(list.iterator()),equalsThree));
+    }
+
+    // Attributes
+    // ------------------------------------------------------------------------
+
+    private List<Integer> list = Arrays.asList(0,1,2,3,4,5,6,7,8,9);
+    private UnaryPredicate<Integer> equalsThree = LeftBoundPredicate.bind(IsEqual.instance(),new Integer(3));
+
+}

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestIndexOfInGenerator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestIndexOfInGenerator.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestIndexOfInGenerator.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestRecursiveEvaluation.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestRecursiveEvaluation.java?rev=1344796&view=auto
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestRecursiveEvaluation.java (added)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestRecursiveEvaluation.java Thu May 31 16:12:39 2012
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.functor.core.algorithm;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.commons.functor.Function;
+import org.apache.commons.functor.core.algorithm.RecursiveEvaluation;
+import org.junit.Test;
+
+/**
+ * Tests {@link RecursiveEvaluation} algorithm.
+ */
+public class TestRecursiveEvaluation {
+
+    @Test
+    public final void testObjectEquals() throws Exception {
+        Object obj = new RecursiveEvaluation(new RecFunc(0, false));
+        assertEquals("equals must be reflexive",obj,obj);
+        assertEquals("hashCode must be reflexive",obj.hashCode(),obj.hashCode());
+        assertTrue(! obj.equals(null) ); // should be able to compare to null
+
+        Object obj2 = new RecursiveEvaluation(new RecFunc(0, false));
+        if (obj.equals(obj2)) {
+            assertEquals("equals implies hash equals",obj.hashCode(),obj2.hashCode());
+            assertEquals("equals must be symmetric",obj2,obj);
+        } else {
+            assertTrue("equals must be symmetric",! obj2.equals(obj));
+        }
+    }
+
+    @Test
+    public void testRecurse() {
+        assertEquals(new Integer(5), new RecursiveEvaluation(new RecFunc(0, false)).evaluate());
+
+        // this version will return a function. since it is not the same type
+        // as RecFunc recursion will end.
+        @SuppressWarnings({ "unchecked", "rawtypes" })
+        Function<Object> func = (Function) new RecursiveEvaluation(new RecFunc(0, true)).evaluate();
+        assertEquals(new Integer(5), func.evaluate());
+    }
+
+    /** Recursive function for test. */
+    class RecFunc implements Function<Object> {
+        int times = 0; boolean returnFunc = false;
+
+        public RecFunc(int times, boolean returnFunc) {
+            this.times = times;
+            this.returnFunc = returnFunc;
+        }
+
+        public Object evaluate() {
+            if (times < 5) {
+                return new RecFunc(++times, returnFunc);
+            } else {
+                if (returnFunc) {
+                    return new Function<Object>() {
+                        public Object evaluate() {
+                            return new Integer(times);
+                        }
+                    };
+                } else {
+                    return new Integer(times);
+                }
+            }
+        }
+    }
+
+}

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestRecursiveEvaluation.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestRecursiveEvaluation.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestRecursiveEvaluation.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestRemoveMatching.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestRemoveMatching.java?rev=1344796&view=auto
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestRemoveMatching.java (added)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestRemoveMatching.java Thu May 31 16:12:39 2012
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.functor.core.algorithm;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.functor.BaseFunctorTest;
+import org.apache.commons.functor.UnaryFunction;
+import org.apache.commons.functor.UnaryPredicate;
+import org.apache.commons.functor.core.algorithm.RemoveMatching;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests {@link RemoveMatching} algorithm.
+ */
+public class TestRemoveMatching extends BaseFunctorTest {
+
+    // Lifecycle
+    // ------------------------------------------------------------------------
+
+    @Before
+    public void setUp() throws Exception {
+        list = new ArrayList<Integer>();
+        evens = new ArrayList<Integer>();
+        for (int i=0;i<10;i++) {
+            list.add(new Integer(i));
+            if (i%2 == 0) {
+                evens.add(new Integer(i));
+            }
+        }
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        list = null;
+        evens = null;
+    }
+
+    // Tests
+    // ------------------------------------------------------------------------
+
+    @Override
+    protected Object makeFunctor() throws Exception {
+        return new RemoveMatching<Integer>();
+    }
+
+    @Test
+    public void testRemove() {
+        new RemoveMatching<Integer>().run(list.iterator(),isOdd);
+        assertEquals(evens,list);
+    }
+
+    // Attributes
+    // ------------------------------------------------------------------------
+    private List<Integer> list = null;
+    private List<Integer> evens = null;
+    private UnaryPredicate<Integer> isOdd = new UnaryPredicate<Integer>() {
+        public boolean test(Integer obj) {
+            return obj % 2 != 0;
+        }
+    };
+
+    // Classes
+    // ------------------------------------------------------------------------
+
+    static class Doubler implements UnaryFunction<Integer, Integer> {
+        public Integer evaluate(Integer obj) {
+            return new Integer(2*obj);
+        }
+    }
+
+}

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestRemoveMatching.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestRemoveMatching.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestRemoveMatching.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestRetainMatching.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestRetainMatching.java?rev=1344796&view=auto
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestRetainMatching.java (added)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestRetainMatching.java Thu May 31 16:12:39 2012
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.functor.core.algorithm;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.functor.BaseFunctorTest;
+import org.apache.commons.functor.UnaryFunction;
+import org.apache.commons.functor.UnaryPredicate;
+import org.apache.commons.functor.core.algorithm.RetainMatching;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests {@link RetainMatching} algorithm.
+ */
+public class TestRetainMatching extends BaseFunctorTest {
+
+    // Lifecycle
+    // ------------------------------------------------------------------------
+
+    @Before
+    public void setUp() throws Exception {
+        list = new ArrayList<Integer>();
+        odds = new ArrayList<Integer>();
+        for (int i=0;i<10;i++) {
+            list.add(new Integer(i));
+            if (i%2 != 0) {
+                odds.add(new Integer(i));
+            }
+        }
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        list = null;
+        odds = null;
+    }
+
+    // Tests
+    // ------------------------------------------------------------------------
+
+    @Override
+    protected Object makeFunctor() throws Exception {
+        return new RetainMatching<Integer>();
+    }
+
+    @Test
+    public void testRemove() {
+        new RetainMatching<Integer>().run(list.iterator(),isOdd);
+        assertEquals(odds,list);
+    }
+
+    // Attributes
+    // ------------------------------------------------------------------------
+    private List<Integer> list = null;
+    private List<Integer> odds = null;
+    private UnaryPredicate<Integer> isOdd = new UnaryPredicate<Integer>() {
+        public boolean test(Integer obj) {
+            return obj % 2 != 0;
+        }
+    };
+
+    // Classes
+    // ------------------------------------------------------------------------
+
+    static class Doubler implements UnaryFunction<Integer, Integer> {
+        public Integer evaluate(Integer obj) {
+            return new Integer(2*obj);
+        }
+    }
+
+}

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestRetainMatching.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestRetainMatching.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestRetainMatching.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestUntilDo.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestUntilDo.java?rev=1344796&view=auto
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestUntilDo.java (added)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestUntilDo.java Thu May 31 16:12:39 2012
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.functor.core.algorithm;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.commons.functor.Procedure;
+import org.apache.commons.functor.core.Offset;
+import org.apache.commons.functor.core.algorithm.UntilDo;
+import org.junit.Test;
+
+/**
+ * Tests {@link UntilDo} algorithm.
+ */
+public class TestUntilDo {
+
+    @Test
+    public final void testObjectEquals() throws Exception {
+        Counter counter = new Counter();
+        Object obj = new UntilDo(new Offset(10), counter);
+        assertEquals("equals must be reflexive",obj,obj);
+        assertEquals("hashCode must be reflexive",obj.hashCode(),obj.hashCode());
+        assertTrue(! obj.equals(null) ); // should be able to compare to null
+
+        Object obj2 = new UntilDo(new Offset(10), counter);
+        if (obj.equals(obj2)) {
+            assertEquals("equals implies hash equals",obj.hashCode(),obj2.hashCode());
+            assertEquals("equals must be symmetric",obj2,obj);
+        } else {
+            assertTrue("equals must be symmetric",! obj2.equals(obj));
+        }
+    }
+
+    @Test
+    public void testUntilDo() {
+        for (int i=0;i<3;i++){
+            Counter counter = new Counter();
+            new UntilDo(new Offset(i), counter).run();
+            assertEquals(i,counter.count);
+        }
+    }
+
+    // Classes
+    // ------------------------------------------------------------------------
+
+    static class Counter implements Procedure {
+        public void run() {
+            count++;
+        }
+        public int count = 0;
+    }
+
+}

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestUntilDo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestUntilDo.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestUntilDo.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestWhileDo.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestWhileDo.java?rev=1344796&view=auto
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestWhileDo.java (added)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestWhileDo.java Thu May 31 16:12:39 2012
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.functor.core.algorithm;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.commons.functor.Procedure;
+import org.apache.commons.functor.core.Limit;
+import org.apache.commons.functor.core.Offset;
+import org.apache.commons.functor.core.algorithm.WhileDo;
+import org.junit.Test;
+
+/**
+ * Tests {@link WhileDo} algorithm.
+ */
+public class TestWhileDo {
+
+    @Test
+    public final void testObjectEquals() throws Exception {
+        Counter counter = new Counter();
+        Object obj = new WhileDo(new Offset(10), counter);
+        assertEquals("equals must be reflexive",obj,obj);
+        assertEquals("hashCode must be reflexive",obj.hashCode(),obj.hashCode());
+        assertTrue(! obj.equals(null) ); // should be able to compare to null
+
+        Object obj2 = new WhileDo(new Offset(10), counter);
+        if (obj.equals(obj2)) {
+            assertEquals("equals implies hash equals",obj.hashCode(),obj2.hashCode());
+            assertEquals("equals must be symmetric",obj2,obj);
+        } else {
+            assertTrue("equals must be symmetric",! obj2.equals(obj));
+        }
+    }
+
+    @Test
+    public void testWhileDo() {
+        for (int i=0;i<3;i++){
+            Counter counter = new Counter();
+            new WhileDo(new Limit(i),counter).run();
+            assertEquals(i,counter.count);
+        }
+    }
+
+    // Classes
+    // ------------------------------------------------------------------------
+
+    static class Counter implements Procedure {
+        public void run() {
+            count++;
+        }
+        public int count = 0;
+    }
+
+}

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestWhileDo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestWhileDo.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/core/algorithm/TestWhileDo.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain