rwaldhoff 2003/03/04 16:16:40 Modified: functor/src/test/org/apache/commons/functor/example FlexiMapExample.java functor project.xml Log: add multimap example Revision Changes Path 1.3 +119 -25 jakarta-commons-sandbox/functor/src/test/org/apache/commons/functor/example/FlexiMapExample.java Index: FlexiMapExample.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/functor/src/test/org/apache/commons/functor/example/FlexiMapExample.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- FlexiMapExample.java 4 Mar 2003 23:11:14 -0000 1.2 +++ FlexiMapExample.java 5 Mar 2003 00:16:38 -0000 1.3 @@ -56,8 +56,11 @@ */ package org.apache.commons.functor.example; +import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; +import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.Set; @@ -73,6 +76,7 @@ import org.apache.commons.functor.adapter.UnaryProcedureUnaryFunction; import org.apache.commons.functor.core.ConstantFunction; import org.apache.commons.functor.core.IdentityFunction; +import org.apache.commons.functor.core.IsInstanceOf; import org.apache.commons.functor.core.IsNull; import org.apache.commons.functor.core.RightIdentityFunction; import org.apache.commons.functor.core.composite.ConditionalUnaryFunction; @@ -154,6 +158,53 @@ assertEquals( new Integer(0), map.get("key") ); } + public void testIntegerValuesOnly() { + Map map = makeIntegerValuedMap(); + map.put("key", new Integer(2)); + assertEquals( new Integer(2), map.get("key") ); + try { + map.put("key2","value"); + fail("Expected ClassCastException"); + } catch(ClassCastException e) { + // expected + } + } + + public void testMultiMap() { + Map map = makeMultiMap(); + + map.put("key", "value 1"); + + { + Collection result = (Collection)(map.get("key")); + assertEquals(1,result.size()); + assertEquals("value 1", result.iterator().next()); + } + + map.put("key", "value 2"); + + { + Collection result = (Collection)(map.get("key")); + assertEquals(2,result.size()); + Iterator iter = result.iterator(); + assertEquals("value 1", iter.next()); + assertEquals("value 2", iter.next()); + } + + map.put("key", "value 3"); + + { + Collection result = (Collection)(map.get("key")); + assertEquals(3,result.size()); + Iterator iter = result.iterator(); + assertEquals("value 1", iter.next()); + assertEquals("value 2", iter.next()); + assertEquals("value 3", iter.next()); + } + + } + + static class FlexiMap implements Map { public FlexiMap(BinaryFunction putfn, BinaryFunction getfn) { @@ -244,31 +295,74 @@ ); } - private Map makeNullAsZeroMap() { - return new FlexiMap( - IgnoreLeftFunction.adapt( - new ConditionalUnaryFunction( - IsNull.getIsNullPredicate(), - new ConstantFunction(new Integer(0)), - IdentityFunction.getIdentityFunction() - ) - ), - null - ); - } + private Map makeNullAsZeroMap() { + return new FlexiMap( + IgnoreLeftFunction.adapt( + new ConditionalUnaryFunction( + IsNull.getIsNullPredicate(), + new ConstantFunction(new Integer(0)), + IdentityFunction.getIdentityFunction() + ) + ), + null + ); + } + + private Map makeIntegerValuedMap() { + return new FlexiMap( + IgnoreLeftFunction.adapt( + new ConditionalUnaryFunction( + new IsInstanceOf(Integer.class), + IdentityFunction.getIdentityFunction(), + UnaryProcedureUnaryFunction.adapt(throwCCE) + ) + ), + null + ); + } + + private Map makeMultiMap() { + return new FlexiMap( + new BinaryFunction() { + public Object evaluate(Object oldval, Object newval) { + List list = null; + if(null == oldval) { + list = new ArrayList(); + } else { + list = (List)oldval; + } + list.add(newval); + return list; + } + }, + null + ); + } private interface UniversalProcedure extends Procedure, UnaryProcedure, BinaryProcedure { } - private UniversalProcedure throwNPE = new UniversalProcedure() { - public void run() { - throw new NullPointerException(); - } - public void run(Object obj) { - run(); - } - public void run(Object left, Object right) { - run(); - } - }; + private UniversalProcedure throwNPE = new UniversalProcedure() { + public void run() { + throw new NullPointerException(); + } + public void run(Object obj) { + run(); + } + public void run(Object left, Object right) { + run(); + } + }; + + private UniversalProcedure throwCCE = new UniversalProcedure() { + public void run() { + throw new ClassCastException(); + } + public void run(Object obj) { + run(); + } + public void run(Object left, Object right) { + run(); + } + }; } 1.2 +1 -1 jakarta-commons-sandbox/functor/project.xml Index: project.xml =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/functor/project.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- project.xml 27 Jan 2003 19:33:37 -0000 1.1 +++ project.xml 5 Mar 2003 00:16:39 -0000 1.2 @@ -64,7 +64,7 @@ <dependencies> <dependency> <id>junit</id> - <version>3.7</version> + <version>3.8.1</version> </dependency> <!-- these two aren't really required by functor, but by maven -->
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]