Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntPercentileAggregatorFunctionTest.java URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntPercentileAggregatorFunctionTest.java?rev=1344757&view=auto ============================================================================== --- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntPercentileAggregatorFunctionTest.java (added) +++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntPercentileAggregatorFunctionTest.java Thu May 31 14:56:47 2012 @@ -0,0 +1,187 @@ +/* + * 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.aggregator.functions; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.functor.BaseFunctorTest; +import org.apache.commons.functor.aggregator.functions.IntegerPercentileAggregatorFunction; +import org.junit.Test; + +/** + * Unit test for {@link IntegerPercentileAggregatorFunction}. + */ +public class IntPercentileAggregatorFunctionTest extends BaseFunctorTest { + private static final double DELTA = 0.01; // make room for some poor + // floating point support + + private static final double DEF_PERC = 90; // by default use the 90th + // percentile + + @Override + protected Object makeFunctor() throws Exception { + return new IntegerPercentileAggregatorFunction(DEF_PERC); + } + + @Test + public void testCreate() throws Exception { + // default + IntegerPercentileAggregatorFunction fct = (IntegerPercentileAggregatorFunction) makeFunctor(); + assertTrue(fct.isUseCopy()); + assertEquals(fct.getPercentile(), DEF_PERC, DELTA); + + // different percentage + double perc = 50.0; + fct = new IntegerPercentileAggregatorFunction(perc); + assertTrue(fct.isUseCopy()); + assertEquals(fct.getPercentile(), perc, DELTA); + + // use copy + fct = new IntegerPercentileAggregatorFunction(perc, false); + assertFalse(fct.isUseCopy()); + assertEquals(fct.getPercentile(), perc, DELTA); + + // test illegal exc + boolean exc = false; + fct = null; + try { + fct = new IntegerPercentileAggregatorFunction(-100); + } catch (IllegalArgumentException e) { + exc = true; + } + assertTrue(exc); + + fct = null; + exc = false; + try { + fct = new IntegerPercentileAggregatorFunction(101); + } catch (IllegalArgumentException e) { + exc = true; + } + assertTrue(exc); + } + + @Test + public void testComputeRank() throws Exception { + List<Integer> data = new ArrayList<Integer>(); + data.add(0); + data.add(1); + data.add(2); + data.add(3); + data.add(4); + // size of list is 5 now + + // first item + IntegerPercentileAggregatorFunction fct = new IntegerPercentileAggregatorFunction(0.0); + int rank = fct.computeRank(data); + assertEquals(rank, 0); + assertEquals(data.get(rank).intValue(), 0); + // last item + fct = new IntegerPercentileAggregatorFunction(100.0); + rank = fct.computeRank(data); + assertEquals(rank, data.size() - 1); + assertEquals(data.get(rank).intValue(), 4); + + // middle one + fct = new IntegerPercentileAggregatorFunction(50.0); + rank = fct.computeRank(data); + assertEquals(rank, 2); + assertEquals(data.get(rank).intValue(), 2); + + // 40% = 2nd item + fct = new IntegerPercentileAggregatorFunction(40.0); + rank = fct.computeRank(data); + assertEquals(rank, 1); + assertEquals(data.get(rank).intValue(), 1); + + // 80% = 4th item + fct = new IntegerPercentileAggregatorFunction(80.0); + rank = fct.computeRank(data); + assertEquals(rank, 3); + assertEquals(data.get(rank).intValue(), 3); + + // in between (e.g. 70%) means 3rd item + fct = new IntegerPercentileAggregatorFunction(70.0); + rank = fct.computeRank(data); + assertEquals(rank, 2); + assertEquals(data.get(rank).intValue(), 2); + + // but 75% means 4th item + fct = new IntegerPercentileAggregatorFunction(75.0); + rank = fct.computeRank(data); + assertEquals(rank, 3); + assertEquals(data.get(rank).intValue(), 3); + } + + @Test + public void testEvaluateNullEmpty() throws Exception { + IntegerPercentileAggregatorFunction fct = (IntegerPercentileAggregatorFunction) makeFunctor(); + List<Integer> data = null; + Integer d = fct.evaluate(data); + assertNull(d); + data = new ArrayList<Integer>(); + d = fct.evaluate(data); + assertNull(d); + } + + @Test + public void testEvaluateNoCopy() throws Exception { + // using a copy + IntegerPercentileAggregatorFunction fct = (IntegerPercentileAggregatorFunction) makeFunctor(); + List<Integer> data = new ArrayList<Integer>(); + data.add(4); + data.add(3); + data.add(2); + data.add(1); + data.add(0); + // size of list is 5 now + + Integer d = fct.evaluate(data); + assertEquals(d.intValue(), 3); + assertEquals(data.get(0).intValue(), 4); + assertEquals(data.get(1).intValue(), 3); + assertEquals(data.get(2).intValue(), 2); + assertEquals(data.get(3).intValue(), 1); + assertEquals(data.get(4).intValue(), 0); + + // using a copy (explicitly) + fct = new IntegerPercentileAggregatorFunction(DEF_PERC, true); + d = fct.evaluate(data); + assertEquals(d.intValue(), 3); + assertEquals(data.get(0).intValue(), 4); + assertEquals(data.get(1).intValue(), 3); + assertEquals(data.get(2).intValue(), 2); + assertEquals(data.get(3).intValue(), 1); + assertEquals(data.get(4).intValue(), 0); + + // operate on the list directly + fct = new IntegerPercentileAggregatorFunction(DEF_PERC, false); + d = fct.evaluate(data); + assertEquals(d.intValue(), 3); + assertEquals(data.get(4).intValue(), 4); + assertEquals(data.get(3).intValue(), 3); + assertEquals(data.get(2).intValue(), 2); + assertEquals(data.get(1).intValue(), 1); + assertEquals(data.get(0).intValue(), 0); + } +}
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntPercentileAggregatorFunctionTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntPercentileAggregatorFunctionTest.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntPercentileAggregatorFunctionTest.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntSumAggregatorBinaryFunctionTest.java URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntSumAggregatorBinaryFunctionTest.java?rev=1344757&view=auto ============================================================================== --- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntSumAggregatorBinaryFunctionTest.java (added) +++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntSumAggregatorBinaryFunctionTest.java Thu May 31 14:56:47 2012 @@ -0,0 +1,62 @@ +/* + * 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.aggregator.functions; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +import java.util.Random; + +import org.apache.commons.functor.BaseFunctorTest; +import org.apache.commons.functor.aggregator.functions.IntegerSumAggregatorBinaryFunction; +import org.junit.Test; + +/** + * Unit test for {@link IntegerSumAggregatorBinaryFunction}. + */ +public class IntSumAggregatorBinaryFunctionTest extends BaseFunctorTest { + @Override + protected Object makeFunctor() throws Exception { + return new IntegerSumAggregatorBinaryFunction(); + } + + @Test + public void testNulls() throws Exception { + IntegerSumAggregatorBinaryFunction fct = (IntegerSumAggregatorBinaryFunction) makeFunctor(); + Integer d = fct.evaluate(null, null); + assertNull(d); + d = fct.evaluate(null, 1); + assertEquals(1, d.intValue()); + d = fct.evaluate(2, null); + assertEquals(2, d.intValue()); + } + + @Test + public void testSum() throws Exception { + IntegerSumAggregatorBinaryFunction fct = (IntegerSumAggregatorBinaryFunction) makeFunctor(); + int total = 0; + int result = 0; + int calls = 31; + Random rnd = new Random(); + for (int i = 0; i < calls; i++) { + int number = rnd.nextInt(); + total += number; + result = fct.evaluate(result, number); + assertEquals(result, total); + } + } +} Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntSumAggregatorBinaryFunctionTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntSumAggregatorBinaryFunctionTest.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntSumAggregatorBinaryFunctionTest.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntSumAggregatorFunctionTest.java URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntSumAggregatorFunctionTest.java?rev=1344757&view=auto ============================================================================== --- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntSumAggregatorFunctionTest.java (added) +++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntSumAggregatorFunctionTest.java Thu May 31 14:56:47 2012 @@ -0,0 +1,76 @@ +/* + * 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.aggregator.functions; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import org.apache.commons.functor.BaseFunctorTest; +import org.apache.commons.functor.aggregator.functions.IntegerSumAggregatorFunction; +import org.junit.Test; + +/** + * Unit test for {@link IntegerSumAggregatorFunction}. + */ +public class IntSumAggregatorFunctionTest extends BaseFunctorTest { + @Override + protected Object makeFunctor() throws Exception { + return new IntegerSumAggregatorFunction(); + } + + @Test + public void testEmptyList() throws Exception { + IntegerSumAggregatorFunction fct = (IntegerSumAggregatorFunction) makeFunctor(); + List<Integer> lst = null; + Integer res = fct.evaluate(lst); + assertNull(res); + lst = new ArrayList<Integer>(); + res = fct.evaluate(lst); + assertNull(res); + } + + @Test + public void testSum() throws Exception { + IntegerSumAggregatorFunction fct = (IntegerSumAggregatorFunction) makeFunctor(); + List<Integer> lst = new ArrayList<Integer>(); + lst.add(0); + int res = fct.evaluate(lst); + assertEquals(res, 0); + lst.add(1); + res = fct.evaluate(lst); + assertEquals(res, 1); + lst.add(2); + res = fct.evaluate(lst); + assertEquals(res, 3); + // finally carry out a random addition + lst.clear(); + int calls = 31; + int total = 0; + Random rnd = new Random(); + for (int i = 0; i < calls; i++) { + int random = rnd.nextInt(); + lst.add(random); + total += random; + res = fct.evaluate(lst); + assertEquals(res, total); + } + } +} Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntSumAggregatorFunctionTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntSumAggregatorFunctionTest.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntSumAggregatorFunctionTest.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/list/OwnFunctionImplementationSample.java URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/list/OwnFunctionImplementationSample.java?rev=1344757&view=auto ============================================================================== --- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/list/OwnFunctionImplementationSample.java (added) +++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/list/OwnFunctionImplementationSample.java Thu May 31 14:56:47 2012 @@ -0,0 +1,94 @@ +/* + * 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.example.aggregator.list; + +import java.util.List; + +import org.apache.commons.functor.UnaryFunction; +import org.apache.commons.functor.aggregator.ArrayListBackedAggregator; +import org.junit.Test; +import static org.junit.Assert.assertEquals; + +/** + * Shows how to implement own aggregation function with a List-backed + * aggregator. In this example we want to monitor whether a certain value + * appears in the list or not. + */ +public class OwnFunctionImplementationSample { + @Test + public void findValue() throws Exception { + // we're looking for 10 + ArrayListBackedAggregator<Integer> agg = new ArrayListBackedAggregator<Integer>(new OwnFunction(10)); + int eval = agg.evaluate(); + assertEquals(eval, -1); + + agg.add( 1 ); + eval = agg.evaluate(); + assertEquals(eval, -1); + + agg.add( 2 ); + eval = agg.evaluate(); + assertEquals(eval, -1); + + agg.add( 10 ); + eval = agg.evaluate(); + assertEquals(eval, 2); + //function finds FIRST occurence! + agg.add( 10 ); + eval = agg.evaluate(); + assertEquals(eval, 2); + agg.add( 10 ); + eval = agg.evaluate(); + assertEquals(eval, 2); + agg.add( 10 ); + eval = agg.evaluate(); + assertEquals(eval, 2); + } + + /** + * This function returns the index of the first occurrence in the list of + * the given value. + */ + static class OwnFunction implements UnaryFunction<List<Integer>, Integer> { + /** Value to find in the list. */ + private int valueToFind; + + public OwnFunction(int valueToFind) { + this.valueToFind = valueToFind; + } + + /** + * Search in the list and find the first index of the given value. + * + * @param lst + * List to search in + * @return index of {@link #valueToFind} if found or -1 if value not + * present in the list + */ + public Integer evaluate(List<Integer> lst) { + if (lst == null || lst.size() == 0) { + return -1; + } + for (int i = 0; i < lst.size(); i++) { + if (lst.get(i).intValue() == valueToFind) { + return i; + } + } + return -1; + } + } +} Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/list/OwnFunctionImplementationSample.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/list/OwnFunctionImplementationSample.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/list/OwnFunctionImplementationSample.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/list/OwnListImplementationSample.java URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/list/OwnListImplementationSample.java?rev=1344757&view=auto ============================================================================== --- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/list/OwnListImplementationSample.java (added) +++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/list/OwnListImplementationSample.java Thu May 31 14:56:47 2012 @@ -0,0 +1,71 @@ +/* + * 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.example.aggregator.list; + +import java.util.LinkedList; +import java.util.List; + +import org.apache.commons.functor.UnaryFunction; +import org.apache.commons.functor.aggregator.AbstractListBackedAggregator; +import org.apache.commons.functor.aggregator.functions.IntegerSumAggregatorFunction; +import org.junit.Test; +import static org.junit.Assert.assertEquals; + +/** + * Class which shows how to provide a custom List implementation with an + * instance of {@link AbstractListBackedAggregator}. This particular instance + * uses a LinkedList. + */ +public class OwnListImplementationSample { + @Test + public void sampleCreateOwnList() { + CustomListAggregator<Integer> agg = new CustomListAggregator<Integer>(new IntegerSumAggregatorFunction()); + int eval = agg.evaluate(); + assertEquals(eval, 0); + agg.add(2); + agg.add(3); + eval = agg.evaluate(); + assertEquals(eval, 5); + assertEquals(agg.getDataSize(), 2); // 2 items added + } + + /** + * List-backed aggregator which uses a LinkedList. + * + * @param <T> + * type of parameter stored. + */ + static class CustomListAggregator<T> extends AbstractListBackedAggregator<T> { + public CustomListAggregator(UnaryFunction<List<T>, T> aggregationFunction) { + super(aggregationFunction); + } + + public CustomListAggregator(UnaryFunction<List<T>, T> aggregationFunction, long interval) { + super(aggregationFunction, interval); + } + + public CustomListAggregator(UnaryFunction<List<T>, T> aggregationFunction, long interval, + boolean useSharedTimer) { + super(aggregationFunction, interval, useSharedTimer); + } + + @Override + protected List<T> createList() { + return new LinkedList<T>(); + } + } +} Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/list/OwnListImplementationSample.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/list/OwnListImplementationSample.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/list/OwnListImplementationSample.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/list/package-info.java URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/list/package-info.java?rev=1344757&view=auto ============================================================================== --- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/list/package-info.java (added) +++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/list/package-info.java Thu May 31 14:56:47 2012 @@ -0,0 +1,21 @@ +/* + * 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 which groups a set of examples for list-backed {@link org.apache.commons.functor.aggregator.Aggregator}. + */ +package org.apache.commons.functor.example.aggregator.list; + Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/list/package-info.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/list/package-info.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/list/package-info.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/nostore/AggregatedFunctionSample.java URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/nostore/AggregatedFunctionSample.java?rev=1344757&view=auto ============================================================================== --- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/nostore/AggregatedFunctionSample.java (added) +++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/nostore/AggregatedFunctionSample.java Thu May 31 14:56:47 2012 @@ -0,0 +1,58 @@ +/* + * 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.example.aggregator.nostore; + +import org.apache.commons.functor.BinaryFunction; +import org.apache.commons.functor.aggregator.AbstractNoStoreAggregator; + +/** + * Shows how to implement own aggregated function to use with + * {@link AbstractNoStoreAggregator}. + */ +public class AggregatedFunctionSample { + /** + * Uses a custom function together with a nostore aggregator to provide a + * continuous logical OR in between all the values added to the aggregator. + */ + public void useOwnFunction() throws Exception { + AbstractNoStoreAggregator<Boolean> or = new AbstractNoStoreAggregator<Boolean>( new OwnBinaryFunction() ) { + @Override + protected Boolean initialValue() { + return false; + } + }; + or.add( false ); + System.out.println( "OR : " + or.evaluate() ); + or.add( true ); + System.out.println( "OR : " + or.evaluate() ); + or.add( false ); + System.out.println( "OR : " + or.evaluate() ); + } + + /** + * This class implements a logical OR: it OR's the 2 parameters passed in + * and returns the result. + * (There are similar implementations already in functor, this is just to + * be used as an example for doing this with a nostore aggregator. + */ + static class OwnBinaryFunction implements BinaryFunction<Boolean, Boolean, Boolean> { + public Boolean evaluate(Boolean left, Boolean right) { + return left.booleanValue() || right.booleanValue(); + } + } +} Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/nostore/AggregatedFunctionSample.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/nostore/AggregatedFunctionSample.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/nostore/AggregatedFunctionSample.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/nostore/NoStoreAggregatorSample.java URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/nostore/NoStoreAggregatorSample.java?rev=1344757&view=auto ============================================================================== --- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/nostore/NoStoreAggregatorSample.java (added) +++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/nostore/NoStoreAggregatorSample.java Thu May 31 14:56:47 2012 @@ -0,0 +1,125 @@ +/* + * 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.example.aggregator.nostore; + +import static org.junit.Assert.assertEquals; + +import java.util.Random; +import java.util.concurrent.TimeUnit; + +import org.apache.commons.functor.aggregator.AbstractNoStoreAggregator; +import org.apache.commons.functor.aggregator.AbstractTimedAggregator; +import org.apache.commons.functor.aggregator.TimedAggregatorListener; +import org.apache.commons.functor.aggregator.functions.IntegerCountAggregatorBinaryFunction; +import org.apache.commons.functor.aggregator.functions.IntegerMaxAggregatorBinaryFunction; +import org.apache.commons.functor.aggregator.functions.IntegerSumAggregatorBinaryFunction; +import org.junit.Test; + +/** + * Examples of using a {@link AbstractNoStoreAggregator}. + */ +public class NoStoreAggregatorSample { + /** + * Shows how to use a simple <i>nostore</i> aggregator to just count number + * of times data is added. + */ + @Test + public void countItems() { + // no timer used + AbstractNoStoreAggregator<Integer> counter = new AbstractNoStoreAggregator<Integer>( + new IntegerCountAggregatorBinaryFunction()) { + @Override + protected Integer initialValue() { + return 0; + } + }; + counter.add(100); + int eval = counter.evaluate(); + // result of evaluate() is 1 as we only added 1 item + assertEquals(eval, 1); + counter.add(1); + counter.add(2); + eval = counter.evaluate(); + // result is now 3 as we added 2 more items + assertEquals(eval, 3); + + // since there is no timer, we need to reset the data manually + counter.reset(); + eval = counter.evaluate(); + assertEquals(eval, 0); + } + + /** + * Shows how to sum up all the items passed in and "flush" them regularly on + * a timer. When the flushing occurs, we print the evaluation to console. + */ + @Test + public void sumItems() throws Exception { + // prepare the listener + TimedAggregatorListener<Integer> listener = new TimedAggregatorListener<Integer>() { + public void onTimer(AbstractTimedAggregator<Integer> aggregator, Integer evaluation) { + System.out.println("Current sum is :" + evaluation); + } + }; + // flush data regularly every 1/2 second + AbstractNoStoreAggregator<Integer> sum = new AbstractNoStoreAggregator<Integer>( + new IntegerSumAggregatorBinaryFunction(), 500) { + @Override + protected Integer initialValue() { + return 0; + } + }; + sum.addTimerListener(listener); + + long startTime = System.currentTimeMillis(); + long stopAfter = 5000; // 5 seconds + int maxInt = 100; + Random rnd = new Random(); + while (System.currentTimeMillis() - startTime <= stopAfter) { + sum.add(rnd.nextInt(maxInt)); + TimeUnit.MILLISECONDS.sleep(rnd.nextInt(maxInt)); + } + sum.stop(); + } + + /** + * Calculate the maximum value of a series of numbers. + */ + @Test + public void maxValue() throws Exception { + // no timer + AbstractNoStoreAggregator<Integer> sum = new AbstractNoStoreAggregator<Integer>( + new IntegerMaxAggregatorBinaryFunction()) { + @Override + protected Integer initialValue() { + return 0; + } + }; + + long startTime = System.currentTimeMillis(); + long stopAfter = 5000; // 5 seconds + int maxInt = 100; + Random rnd = new Random(); + while (System.currentTimeMillis() - startTime <= stopAfter) { + sum.add(rnd.nextInt()); + System.out.println( "Max so far is " + sum.evaluate()); + TimeUnit.MILLISECONDS.sleep(rnd.nextInt(maxInt)); + } + sum.stop(); + } +} Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/nostore/NoStoreAggregatorSample.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/nostore/NoStoreAggregatorSample.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/nostore/NoStoreAggregatorSample.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/nostore/package-info.java URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/nostore/package-info.java?rev=1344757&view=auto ============================================================================== --- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/nostore/package-info.java (added) +++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/nostore/package-info.java Thu May 31 14:56:47 2012 @@ -0,0 +1,22 @@ +/* + * 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 which groups a set of examples for {@link org.apache.commons.functor.aggregator.AbstractNoStoreAggregator}. + */ +package org.apache.commons.functor.example.aggregator.nostore; + Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/nostore/package-info.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/nostore/package-info.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/nostore/package-info.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/package-info.java URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/package-info.java?rev=1344757&view=auto ============================================================================== --- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/package-info.java (added) +++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/package-info.java Thu May 31 14:56:47 2012 @@ -0,0 +1,20 @@ +/* + * 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 which groups a set of examples for {@link org.apache.commons.functor.aggregator.Aggregator}. + */ +package org.apache.commons.functor.example.aggregator; Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/package-info.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/package-info.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/example/aggregator/package-info.java ------------------------------------------------------------------------------ svn:mime-type = text/plain