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 16:56:50 UTC
svn commit: r1344757 [3/4] - in /commons/proper/functor/trunk: ./
src/changes/ src/main/java/org/apache/commons/functor/aggregator/
src/main/java/org/apache/commons/functor/aggregator/functions/
src/site/xdoc/ src/test/java/org/apache/commons/functor/a...
Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/AbstractListBackedAggregatorTest.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/AbstractListBackedAggregatorTest.java?rev=1344757&view=auto
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/AbstractListBackedAggregatorTest.java (added)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/AbstractListBackedAggregatorTest.java Thu May 31 14:56:47 2012
@@ -0,0 +1,214 @@
+/*
+ * 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;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.List;
+import java.util.Random;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.apache.commons.functor.BaseFunctorTest;
+import org.apache.commons.functor.UnaryFunction;
+import org.apache.commons.functor.aggregator.AbstractListBackedAggregator;
+import org.junit.Test;
+
+/**
+ * Unit test for {@link AbstractListBackedAggregator}. TODO: revisit after the
+ * class hierarchy change
+ */
+public class AbstractListBackedAggregatorTest extends BaseFunctorTest {
+ @Override
+ protected Object makeFunctor() throws Exception {
+ return new TestListBackedAggregator<Object>();
+ }
+
+ /**
+ * Ensure <code>series</code> is created in constructor.
+ */
+ @Test
+ public void testListCreated() throws Exception {
+ @SuppressWarnings("unchecked")
+ TestListBackedAggregator<Object> fct = (TestListBackedAggregator<Object>) makeFunctor();
+ assertNotNull(fct.getSeries());
+ assertEquals(fct.getSeries().size(), 0);
+ }
+
+ /**
+ * Ensures beforeAdd/afterAdd is called correctly.
+ */
+ @Test
+ public void testAdd() throws Exception {
+ @SuppressWarnings("unchecked")
+ TestListBackedAggregator<Object> fct = (TestListBackedAggregator<Object>) makeFunctor();
+ int calls = 31; // nearly 10 pies :)
+ for (int i = 1; i <= calls; i++) {
+ fct.add(new Object());
+ assertEquals(fct.getSeries().size(), i);
+ assertEquals(fct.callsCreateList, 0);
+ }
+ }
+
+ @Test
+ public void testReset() throws Exception {
+ @SuppressWarnings("unchecked")
+ TestListBackedAggregator<Object> fct = (TestListBackedAggregator<Object>) makeFunctor();
+ int calls = 31; // nearly 10 pies :)
+ for (int i = 1; i <= calls; i++) {
+ fct.reset();
+ assertEquals(fct.getSeries().size(), 0);
+ assertEquals(fct.callsCreateList, 0);
+ }
+ }
+
+ /**
+ * Ensures beforeEvaluate/afterEvauate is called correctly.
+ */
+ @Test
+ public void testEvaluate() throws Exception {
+ @SuppressWarnings("unchecked")
+ TestListBackedAggregator<Object> fct = (TestListBackedAggregator<Object>) makeFunctor();
+ TestUnaryFunction<Object> agg = (TestUnaryFunction<Object>) fct.getAggregationFunction();
+ int calls = 31; // nearly 10 pies :)
+ // test first without throwing an exception
+ for (int i = 1; i <= calls; i++) {
+ Object o = fct.evaluate();
+ assertNull(o);
+ assertEquals(fct.getSeries().size(), 0);
+ assertEquals(agg.calls, i);
+ assertEquals(fct.callsCreateList, 0);
+ }
+
+ // now throw the exception and make sure we still count ok
+ fct.resetUsage();
+ agg.exception = true;
+ boolean exc = false;
+ for (int i = 1; i <= calls; i++) {
+ Object o = null;
+ exc = false;
+ try {
+ o = fct.evaluate();
+ } catch (Exception e) {
+ exc = true;
+ }
+ assertNull(o);
+ assertTrue(exc); // make sure we have actually thrown it!
+ assertEquals(fct.getSeries().size(), 0);
+ assertEquals(agg.calls, i);
+ assertEquals(fct.callsCreateList, 0);
+ }
+ }
+
+ /**
+ * "Complete" add/evaluate/reset chain.
+ */
+ @Test
+ public void testAddEvaluateReset() throws Exception {
+ @SuppressWarnings("unchecked")
+ TestListBackedAggregator<Object> fct = (TestListBackedAggregator<Object>) makeFunctor();
+ TestUnaryFunction<Object> agg = (TestUnaryFunction<Object>) fct.getAggregationFunction();
+ int callsAdd = 31; // nearly 10 pies :)
+ int callsEvaluate = 2; // circumference (i.e. 2 pies)
+ int callsReset = 17;
+ for (int i = 1; i <= callsAdd; i++)
+ fct.add(new Object());
+ assertEquals(fct.getSeries().size(), callsAdd);
+ assertEquals(agg.calls, 0);
+ assertEquals(fct.callsCreateList, 0);
+
+ for (int i = 1; i <= callsEvaluate; i++)
+ fct.evaluate();
+ assertEquals(fct.getSeries().size(), callsAdd);
+ assertEquals(agg.calls, callsEvaluate);
+ assertEquals(fct.callsCreateList, 0);
+
+ for (int i = 1; i <= callsReset; i++)
+ fct.reset();
+ assertEquals(fct.getSeries().size(), 0);
+ assertEquals(agg.calls, callsEvaluate);
+ assertEquals(fct.callsCreateList, 0);
+ }
+
+ @Test
+ public void testGetSize() throws Exception {
+ @SuppressWarnings("unchecked")
+ TestListBackedAggregator<Object> fct = (TestListBackedAggregator<Object>) makeFunctor();
+ Random nAdds = new Random(); // this decides how many adds we do at each
+ // step
+ int callsAdd = 31;
+ int currSize = 0;
+ int maxAdds = 100; // maximum objects to add in one cycle
+ for (int i = 0; i < callsAdd; i++) {
+ int currAdds = nAdds.nextInt(maxAdds);
+ currSize += currAdds;
+ for (int j = 0; j < currAdds; j++) {
+ fct.add(new Object());
+ }
+ assertEquals(currSize, fct.getDataSize());
+ }
+ }
+
+ /**
+ * Dummy UnaryFunction which counts the number of calls to
+ * {@link #evaluate(List)}.
+ */
+ class TestUnaryFunction<T> implements UnaryFunction<List<T>, T> {
+ int calls = 0;
+ boolean exception = false; // when set to true, evaluate will throw an
+ // exception
+
+ public T evaluate(List<T> obj) {
+ calls++;
+ if (exception)
+ throw new RuntimeException();
+ return null;
+ }
+ }
+
+ /**
+ * Dummy aggregator which counts calls to before/after functions.
+ */
+ class TestListBackedAggregator<T> extends AbstractListBackedAggregator<T> {
+ int callsCreateList;
+
+ public TestListBackedAggregator() {
+ super(new TestUnaryFunction<T>());
+ resetUsage();
+ }
+
+ /**
+ * Convenience method to reset all counters to zero (rather than
+ * creating a new instance of this)
+ */
+ public void resetUsage() {
+ callsCreateList = 0;
+ TestUnaryFunction<T> fct = (TestUnaryFunction<T>) getAggregationFunction();
+ fct.calls = 0;
+ }
+
+ @Override
+ protected List<T> createList() {
+ // for the purpose of testing we'll be using a sync'd implementation
+ // of List
+ callsCreateList++;
+ return new CopyOnWriteArrayList<T>();
+ }
+ }
+}
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/AbstractListBackedAggregatorTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/AbstractListBackedAggregatorTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/AbstractListBackedAggregatorTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/AbstractNoStoreAggregatorTest.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/AbstractNoStoreAggregatorTest.java?rev=1344757&view=auto
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/AbstractNoStoreAggregatorTest.java (added)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/AbstractNoStoreAggregatorTest.java Thu May 31 14:56:47 2012
@@ -0,0 +1,167 @@
+/*
+ * 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;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.commons.functor.BaseFunctorTest;
+import org.apache.commons.functor.BinaryFunction;
+import org.apache.commons.functor.aggregator.AbstractNoStoreAggregator;
+import org.junit.Test;
+
+/**
+ * Unit test for {@link AbstractNoStoreAggregator}. TODO: revisit after the
+ * class hierarchy change
+ */
+public class AbstractNoStoreAggregatorTest extends BaseFunctorTest {
+ private static final String INITIAL = "abc";
+
+ @Override
+ protected Object makeFunctor() throws Exception {
+ // return new TestListBackedAggregator<Object>();
+ return new TestNoStoreAggregator<Object>(new String(INITIAL));
+ }
+
+ /**
+ * Ensure data is initialised in constructor.
+ */
+ @Test
+ public void testInitialised() throws Exception {
+ @SuppressWarnings("unchecked")
+ TestNoStoreAggregator<Object> fct = (TestNoStoreAggregator<Object>) makeFunctor();
+ assertNotNull(fct.getResult());
+ TestBinaryFunction<Object> agg = (TestBinaryFunction<Object>) fct.getAggregationFunction();
+ assertEquals(fct.callsInitialValue, 1);
+ assertEquals(agg.calls, 0);
+ }
+
+ @Test
+ public void testAdd() throws Exception {
+ @SuppressWarnings("unchecked")
+ TestNoStoreAggregator<Object> fct = (TestNoStoreAggregator<Object>) makeFunctor();
+ TestBinaryFunction<Object> agg = (TestBinaryFunction<Object>) fct.getAggregationFunction();
+ int calls = 31; // nearly 10 pies :)
+ for (int i = 1; i <= calls; i++) {
+ fct.add(new Object());
+ assertEquals(INITIAL, fct.getResult());
+ assertEquals(fct.callsInitialValue, 1);
+ assertEquals(agg.calls, i);
+ }
+
+ // now throw the exception and make sure we still count ok
+ fct.resetUsage();
+ agg.exception = true;
+ boolean exc = false;
+ for (int i = 1; i <= calls; i++) {
+ exc = false;
+ try {
+ fct.add(new Object());
+ } catch (Exception e) {
+ exc = true;
+ }
+ assertTrue(exc); // make sure we have actually thrown it!
+ assertEquals(INITIAL, fct.getResult());
+ assertEquals(agg.calls, i);
+ assertEquals(fct.callsInitialValue, 0);
+ }
+ }
+
+ /**
+ * Ensures beforeReset/afterReset is called correctly.
+ */
+ @Test
+ public void testReset() throws Exception {
+ @SuppressWarnings("unchecked")
+ TestNoStoreAggregator<Object> fct = (TestNoStoreAggregator<Object>) makeFunctor();
+ int calls = 31; // nearly 10 pies :)
+ for (int i = 1; i <= calls; i++) {
+ fct.reset();
+ assertEquals(INITIAL, fct.getResult());
+ assertEquals(fct.callsInitialValue, i + 1);
+ }
+ }
+
+ /**
+ * Ensures beforeEvaluate/afterEvauate is called correctly.
+ */
+ @Test
+ public void testEvaluate() throws Exception {
+ @SuppressWarnings("unchecked")
+ TestNoStoreAggregator<Object> fct = (TestNoStoreAggregator<Object>) makeFunctor();
+ TestBinaryFunction<Object> agg = (TestBinaryFunction<Object>) fct.getAggregationFunction();
+ int calls = 31; // nearly 10 pies :)
+ // test first without throwing an exception
+ for (int i = 1; i <= calls; i++) {
+ Object o = fct.evaluate();
+ assertSame(o, fct.getResult());
+ assertEquals(INITIAL, fct.getResult());
+ assertEquals(agg.calls, 0);
+ assertEquals(fct.callsInitialValue, 1);
+ }
+ }
+
+ /**
+ * Dummy binary function which always returns the first parameter.
+ */
+ class TestBinaryFunction<T> implements BinaryFunction<T, T, T> {
+ int calls = 0;
+ boolean exception = false; // when set to true, evaluate will throw an
+ // exception
+
+ public T evaluate(T left, T right) {
+ calls++;
+ if (exception)
+ throw new RuntimeException();
+ return left;
+ }
+ }
+
+ /**
+ * Dummy aggregator which counts calls to before/after functions.
+ */
+ class TestNoStoreAggregator<T> extends AbstractNoStoreAggregator<T> {
+ int callsInitialValue;
+
+ T initial;
+
+ public TestNoStoreAggregator(T initial) {
+ super(new TestBinaryFunction<T>());
+ this.initial = initial;
+ resetUsage();
+ this.setResult(initialValue());
+ }
+
+ /**
+ * Convenience method to reset all counters to zero (rather than
+ * creating a new instance of this)
+ */
+ public void resetUsage() {
+ callsInitialValue = 0;
+ TestBinaryFunction<T> fct = (TestBinaryFunction<T>) getAggregationFunction();
+ fct.calls = 0;
+ }
+
+ @Override
+ protected T initialValue() {
+ callsInitialValue++;
+ return initial;
+ }
+ }
+}
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/AbstractNoStoreAggregatorTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/AbstractNoStoreAggregatorTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/AbstractNoStoreAggregatorTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/AbstractTimedAggregatorTest.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/AbstractTimedAggregatorTest.java?rev=1344757&view=auto
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/AbstractTimedAggregatorTest.java (added)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/AbstractTimedAggregatorTest.java Thu May 31 14:56:47 2012
@@ -0,0 +1,160 @@
+/*
+ * 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;
+
+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.List;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.commons.functor.BaseFunctorTest;
+import org.apache.commons.functor.aggregator.AbstractTimedAggregator;
+import org.apache.commons.functor.aggregator.TimedAggregatorListener;
+import org.junit.Test;
+
+public class AbstractTimedAggregatorTest extends BaseFunctorTest {
+ /** Default timer interval used in the tests. */
+ private static final long DEFAULT_INTERVAL = 500L; // 0.5 second
+
+ /** Sleep extra msecs past the interval. */
+ private static final long SLEEP = 10L;
+
+ @Override
+ protected Object makeFunctor() throws Exception {
+ return new SimpleStoreTimedAggregator();
+ }
+
+ @Test
+ public void testCreateNoTimer() throws Exception {
+ SimpleStoreTimedAggregator agg = (SimpleStoreTimedAggregator) makeFunctor();
+ assertEquals(agg.getInterval(), 0L);
+ assertFalse(agg.isTimerEnabled());
+ assertFalse(agg.isSharedTimer());
+ assertNull(agg.getTimerListeners());
+ assertFalse(agg.removeTimerListener(null)); // shouldn't NPE here
+ // because the listeners
+ // list is null!
+ agg.stop(); // shouldn't trigger any exceptions, even though there's no
+ // timer
+ }
+
+ private void standardTimerTesting(SimpleStoreTimedAggregator agg, long interval) throws Exception {
+ final AtomicInteger count = new AtomicInteger();
+ TimedAggregatorListener<Integer> timedListener = new TimedAggregatorListener<Integer>() {
+ public void onTimer(AbstractTimedAggregator<Integer> aggregator, Integer evaluation) {
+ count.incrementAndGet();
+ }
+ };
+
+ assertEquals(agg.getInterval(), interval);
+ assertEquals(agg.getTimerListeners().size(), 0);
+ agg.addTimerListener(timedListener);
+ List<TimedAggregatorListener<Integer>> timerListeners = agg.getTimerListeners();
+ assertTrue(timerListeners.contains(timedListener));
+ TimeUnit.MILLISECONDS.sleep(interval + SLEEP);
+ // timer should have kicked in by now
+ assertTrue(count.intValue() > 0);
+
+ TimedAggregatorListener<Integer> wrongListener = new TimedAggregatorListener<Integer>() {
+ public void onTimer(AbstractTimedAggregator<Integer> aggregator, Integer evaluation) {
+ // do nothing in here
+ }
+ };
+ assertFalse(agg.removeTimerListener(wrongListener));
+ assertEquals(agg.getTimerListeners().size(), 1);
+ assertTrue(agg.removeTimerListener(timedListener));
+ int saveValue = count.get();
+ assertEquals(agg.getTimerListeners().size(), 0);
+ // give enough time for the timer to kick in again
+ TimeUnit.MILLISECONDS.sleep(interval + SLEEP);
+ assertEquals(saveValue, count.get());
+
+ }
+
+ @Test
+ public void testCreateIntervalParam() throws Exception {
+ SimpleStoreTimedAggregator agg = new SimpleStoreTimedAggregator(DEFAULT_INTERVAL);
+ assertTrue(agg.isTimerEnabled());
+ assertFalse(agg.isSharedTimer());
+ standardTimerTesting(agg, DEFAULT_INTERVAL);
+ agg.stop();
+ }
+
+ @Test
+ public void testCreateNotSharedTimer() throws Exception {
+ SimpleStoreTimedAggregator agg = new SimpleStoreTimedAggregator(DEFAULT_INTERVAL, false);
+ assertTrue(agg.isTimerEnabled());
+ assertFalse(agg.isSharedTimer());
+ standardTimerTesting(agg, DEFAULT_INTERVAL);
+ agg.stop();
+ }
+
+ @Test
+ public void testCreateSharedTimer() throws Exception {
+ SimpleStoreTimedAggregator agg = new SimpleStoreTimedAggregator(DEFAULT_INTERVAL, true);
+ assertTrue(agg.isTimerEnabled());
+ assertTrue(agg.isSharedTimer());
+ standardTimerTesting(agg, DEFAULT_INTERVAL);
+ agg.stop();
+ }
+
+ /**
+ * Simple timed aggregator which just stores the latest object and returns
+ * it when evaluating the result.
+ *
+ * @author Liviu Tudor http://about.me/liviutudor
+ */
+ class SimpleStoreTimedAggregator extends AbstractTimedAggregator<Integer> {
+ private Integer object;
+
+ public SimpleStoreTimedAggregator() {
+ super();
+ }
+
+ public SimpleStoreTimedAggregator(long interval) {
+ super(interval);
+ }
+
+ public SimpleStoreTimedAggregator(long interval, boolean useSharedTimer) {
+ super(interval, useSharedTimer);
+ }
+
+ @Override
+ protected void doAdd(Integer data) {
+ this.object = data;
+ }
+
+ @Override
+ protected Integer doEvaluate() {
+ return object;
+ }
+
+ @Override
+ protected int retrieveDataSize() {
+ return 1;
+ }
+
+ @Override
+ protected void doReset() {
+ object = new Integer(0);
+ }
+ }
+}
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/AbstractTimedAggregatorTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/AbstractTimedAggregatorTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/AbstractTimedAggregatorTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/ArrayListBackedAggregatorTest.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/ArrayListBackedAggregatorTest.java?rev=1344757&view=auto
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/ArrayListBackedAggregatorTest.java (added)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/ArrayListBackedAggregatorTest.java Thu May 31 14:56:47 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.aggregator;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+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.UnaryFunction;
+import org.apache.commons.functor.aggregator.ArrayListBackedAggregator;
+import org.junit.Test;
+
+/**
+ * Unit test for {@link ArrayListBackedAggregator}. TODO: Some multi-threaded
+ * testing
+ */
+public class ArrayListBackedAggregatorTest extends BaseFunctorTest {
+ @Override
+ protected Object makeFunctor() throws Exception {
+ return new ArrayListBackedAggregator<Object>(new SelectFirstUnaryFunction<Object>());
+ }
+
+ @Test
+ public void testCreateList() throws Exception {
+ @SuppressWarnings("unchecked")
+ ArrayListBackedAggregator<Object> fct = (ArrayListBackedAggregator<Object>) makeFunctor();
+ assertNotNull(fct.getSeries());
+ assertTrue(fct.getSeries() instanceof ArrayList);
+ assertEquals(fct.getSeries().size(), 0);
+ // NOTE: would be good to be able to check the ArrayList capacity!
+ int initialSize = 31; // nearly 10 pies
+ fct = new ArrayListBackedAggregator<Object>(new SelectFirstUnaryFunction<Object>(), initialSize);
+ assertNotNull(fct.getSeries());
+ assertTrue(fct.getSeries() instanceof ArrayList);
+ assertEquals(fct.getSeries().size(), 0);
+ }
+
+ /**
+ * Dummy UnaryFunction which counts the number of calls to
+ * {@link #evaluate(List)} and always selects the first item in the given
+ * list or null if list is null or empty.
+ */
+ class SelectFirstUnaryFunction<T> implements UnaryFunction<List<T>, T> {
+ int calls = 0;
+ boolean exception = false; // when set to true, evaluate will throw an
+ // exception
+
+ public T evaluate(List<T> obj) {
+ calls++;
+ if (exception)
+ throw new RuntimeException();
+ if (obj == null || obj.size() == 0)
+ return null;
+ return obj.get(0);
+ }
+ }
+}
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/ArrayListBackedAggregatorTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/ArrayListBackedAggregatorTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/ArrayListBackedAggregatorTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleMaxAggregatorBinaryFunctionTest.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleMaxAggregatorBinaryFunctionTest.java?rev=1344757&view=auto
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleMaxAggregatorBinaryFunctionTest.java (added)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleMaxAggregatorBinaryFunctionTest.java Thu May 31 14:56:47 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.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.DoubleMaxAggregatorBinaryFunction;
+import org.junit.Test;
+
+/**
+ * Unit test for {@link DoubleMaxAggregatorBinaryFunction}.
+ */
+public class DoubleMaxAggregatorBinaryFunctionTest extends BaseFunctorTest {
+ private static final double DELTA = 0.01; // make room for some poor
+ // floating point support
+
+ @Override
+ protected Object makeFunctor() throws Exception {
+ return new DoubleMaxAggregatorBinaryFunction();
+ }
+
+ @Test
+ public void testNulls() throws Exception {
+ DoubleMaxAggregatorBinaryFunction fct = (DoubleMaxAggregatorBinaryFunction) makeFunctor();
+ Double d = fct.evaluate(null, null);
+ assertNull(d);
+ d = fct.evaluate(null, 1.0);
+ assertEquals(1.0, d.doubleValue(), DELTA);
+ d = fct.evaluate(2.0, null);
+ assertEquals(2.0, d.doubleValue(), DELTA);
+ }
+
+ @Test
+ public void testMax() throws Exception {
+ DoubleMaxAggregatorBinaryFunction fct = (DoubleMaxAggregatorBinaryFunction) makeFunctor();
+ double max = 0.0;
+ double result = 0.0;
+ double number1 = 0.0;
+ double number2 = 0.0;
+ int calls = 31;
+ Random rnd = new Random();
+ for (int i = 0; i < calls; i++) {
+ number1 = rnd.nextDouble();
+ number2 = rnd.nextDouble();
+ max = Math.max(number1, number2);
+ result = fct.evaluate(number1, number2);
+ assertEquals(result, max, DELTA);
+ }
+ }
+
+}
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleMaxAggregatorBinaryFunctionTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleMaxAggregatorBinaryFunctionTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleMaxAggregatorBinaryFunctionTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleMaxAggregatorFunctionTest.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleMaxAggregatorFunctionTest.java?rev=1344757&view=auto
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleMaxAggregatorFunctionTest.java (added)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleMaxAggregatorFunctionTest.java Thu May 31 14:56:47 2012
@@ -0,0 +1,78 @@
+/*
+ * 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.DoubleMaxAggregatorFunction;
+import org.junit.Test;
+
+/**
+ * Unit test for {@link DoubleMaxAggregatorFunction}.
+ */
+public class DoubleMaxAggregatorFunctionTest extends BaseFunctorTest {
+ @Override
+ protected Object makeFunctor() throws Exception {
+ return new DoubleMaxAggregatorFunction();
+ }
+
+ @Test
+ public void testEmptyList() throws Exception {
+ DoubleMaxAggregatorFunction fct = (DoubleMaxAggregatorFunction) makeFunctor();
+ List<Double> lst = null;
+ Double res = fct.evaluate(lst);
+ assertNull(res);
+ lst = new ArrayList<Double>();
+ res = fct.evaluate(lst);
+ assertNull(res);
+ }
+
+ @Test
+ public void testSum() throws Exception {
+ DoubleMaxAggregatorFunction fct = (DoubleMaxAggregatorFunction) makeFunctor();
+ List<Double> lst = new ArrayList<Double>();
+ lst.add(0.0);
+ double res = fct.evaluate(lst);
+ assertEquals(res, 0.0, 0.01);
+ lst.add(1.0);
+ res = fct.evaluate(lst);
+ assertEquals(res, 1.0, 0.01);
+ lst.add(2.0);
+ res = fct.evaluate(lst);
+ assertEquals(res, 2.0, 0.01);
+ // finally carry out a random addition
+ lst.clear();
+ int calls = 31;
+ double max = 0.0;
+ Random rnd = new Random();
+ for (int i = 0; i < calls; i++) {
+ double random = rnd.nextDouble();
+ lst.add(random);
+ if (random > max) {
+ max = random;
+ }
+ res = fct.evaluate(lst);
+ assertEquals(res, max, 0.01);
+ }
+ }
+}
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleMaxAggregatorFunctionTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleMaxAggregatorFunctionTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleMaxAggregatorFunctionTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleMeanValueAggregatorFunctionTest.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleMeanValueAggregatorFunctionTest.java?rev=1344757&view=auto
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleMeanValueAggregatorFunctionTest.java (added)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleMeanValueAggregatorFunctionTest.java Thu May 31 14:56:47 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.aggregator.functions;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.functor.BaseFunctorTest;
+import org.apache.commons.functor.aggregator.functions.DoubleMeanValueAggregatorFunction;
+import org.junit.Test;
+
+/**
+ * Unit test for {@link DoubleMeanValueAggregatorFunction}.
+ */
+public class DoubleMeanValueAggregatorFunctionTest extends BaseFunctorTest {
+ @Override
+ protected Object makeFunctor() throws Exception {
+ return new DoubleMeanValueAggregatorFunction();
+ }
+
+ @Test
+ public void testEmptyList() throws Exception {
+ DoubleMeanValueAggregatorFunction fct = (DoubleMeanValueAggregatorFunction)makeFunctor();
+ List<Double> lst = null;
+ Double res = fct.evaluate(lst);
+ assertNull( res );
+ lst = new ArrayList<Double>();
+ res = fct.evaluate(lst);
+ assertNull( res );
+ }
+
+ @Test
+ public void testMean() throws Exception {
+ DoubleMeanValueAggregatorFunction fct = (DoubleMeanValueAggregatorFunction)makeFunctor();
+ List<Double> lst = new ArrayList<Double>();
+ lst.add( 0.0 );
+ double res = fct.evaluate(lst);
+ assertEquals(res, 0.0, 0.01);
+ lst.add( 1.0 );
+ res = fct.evaluate( lst );
+ assertEquals( res, 0.5, 0.01 );
+ lst.add( 2.0 );
+ res = fct.evaluate( lst );
+ assertEquals( res, 1.0, 0.01 );
+ //finally carry out a random mean computation
+ int calls = 31;
+ double total;
+ for( int i = 2; i <= calls; i++ ) {
+ lst.clear();
+ total = 0.0;
+ for( int j = 1; j <= i; j++ ) {
+ lst.add( (double)j );
+ total += j;
+ }
+ total /= i;
+ res = fct.evaluate( lst );
+ assertEquals( res, total, 0.01 );
+ }
+ }
+}
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleMeanValueAggregatorFunctionTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleMeanValueAggregatorFunctionTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleMeanValueAggregatorFunctionTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleMedianValueAggregatorFunctionTest.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleMedianValueAggregatorFunctionTest.java?rev=1344757&view=auto
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleMedianValueAggregatorFunctionTest.java (added)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleMedianValueAggregatorFunctionTest.java Thu May 31 14:56:47 2012
@@ -0,0 +1,141 @@
+/*
+ * 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.assertNotNull;
+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.DoubleMedianValueAggregatorFunction;
+import org.junit.Test;
+
+/**
+ * Unit test for {@link DoubleMedianValueAggregatorFunction}.
+ */
+public class DoubleMedianValueAggregatorFunctionTest extends BaseFunctorTest {
+ private static final double DELTA = 0.01; // make room for some poor
+ // floating point precision
+
+ @Override
+ protected Object makeFunctor() throws Exception {
+ return new DoubleMedianValueAggregatorFunction();
+ }
+
+ @Test
+ public void testEmptyList() throws Exception {
+ DoubleMedianValueAggregatorFunction fct = (DoubleMedianValueAggregatorFunction) makeFunctor();
+ assertTrue(fct.isUseCopy());
+ List<Double> lst = null;
+ Double res = fct.evaluate(lst);
+ assertNull(res);
+ lst = new ArrayList<Double>();
+ res = fct.evaluate(lst);
+ assertNull(res);
+ }
+
+ /**
+ * Ensure we compute the median correctly and also we don't affect the
+ * original list.
+ */
+ @Test
+ public void testMedianCopy() throws Exception {
+ DoubleMedianValueAggregatorFunction fct = new DoubleMedianValueAggregatorFunction(true);
+ assertTrue(fct.isUseCopy());
+ checkMedianCopy(fct);
+ // this is also the default behaviour so ensure that is the case
+ fct = (DoubleMedianValueAggregatorFunction) makeFunctor();
+ checkMedianCopy(fct);
+ }
+
+ /**
+ * Called by {@link #testMedianCopy()} internally.
+ */
+ void checkMedianCopy(DoubleMedianValueAggregatorFunction fct) throws Exception {
+ List<Double> lst = new ArrayList<Double>();
+ lst.add(10.0);
+ double res = fct.evaluate(lst);
+ assertEquals(res, 10.0, DELTA);
+ assertListEqualsArray(lst, new double[] { 10.0 });
+ lst.add(1000.0);
+ res = fct.evaluate(lst);
+ assertEquals(res, 505.0, DELTA);
+ assertListEqualsArray(lst, new double[] { 10.0, 1000.0 });
+ lst.add(30.0);
+ res = fct.evaluate(lst);
+ assertEquals(res, 30.0, DELTA);
+ assertListEqualsArray(lst, new double[] { 10.0, 1000.0, 30.0 });
+ lst.add(100.0);
+ res = fct.evaluate(lst);
+ assertEquals(res, 65.0, DELTA);
+ assertListEqualsArray(lst, new double[] { 10.0, 1000.0, 30.0, 100.0 });
+ lst.add(20.0);
+ res = fct.evaluate(lst);
+ assertEquals(res, 30.0, DELTA);
+ assertListEqualsArray(lst, new double[] { 10.0, 1000.0, 30.0, 100.0, 20.0 });
+ }
+
+ /**
+ * Ensure we compute the median correctly and also we sort the original
+ * list.
+ */
+ @Test
+ public void testMedianNotCopy() throws Exception {
+ DoubleMedianValueAggregatorFunction fct = new DoubleMedianValueAggregatorFunction(false);
+ assertFalse(fct.isUseCopy());
+ List<Double> lst = new ArrayList<Double>();
+ lst.add(10.0);
+ double res = fct.evaluate(lst);
+ assertEquals(res, 10.0, DELTA);
+ assertListEqualsArray(lst, new double[] { 10.0 });
+ lst.add(1000.0);
+ res = fct.evaluate(lst);
+ assertEquals(res, 505.0, DELTA);
+ assertListEqualsArray(lst, new double[] { 10.0, 1000.0 });
+ lst.add(30.0);
+ res = fct.evaluate(lst);
+ assertEquals(res, 30.0, DELTA);
+ assertListEqualsArray(lst, new double[] { 10.0, 30.0, 1000.0 });
+ lst.add(100.0);
+ res = fct.evaluate(lst);
+ assertEquals(res, 65.0, DELTA);
+ assertListEqualsArray(lst, new double[] { 10.0, 30.0, 100.0, 1000.0 });
+ lst.add(20.0);
+ res = fct.evaluate(lst);
+ assertEquals(res, 30.0, DELTA);
+ assertListEqualsArray(lst, new double[] { 10.0, 20.0, 30.0, 100.0, 1000.0 });
+ }
+
+ /**
+ * Utility function to check the elements of a list are in a given order.
+ * Simply build an inline array and pass it in the <code>arr</code>
+ * parameter.
+ */
+ void assertListEqualsArray(List<Double> list, double arr[]) throws Exception {
+ assertNotNull(list);
+ assertNotNull(arr);
+ assertEquals(list.size(), arr.length);
+ for (int i = 0; i < arr.length; i++) {
+ assertEquals(list.get(i).doubleValue(), arr[i], DELTA);
+ }
+ }
+}
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleMedianValueAggregatorFunctionTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleMedianValueAggregatorFunctionTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleMedianValueAggregatorFunctionTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoublePercentileAggregatorFunctionTest.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoublePercentileAggregatorFunctionTest.java?rev=1344757&view=auto
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoublePercentileAggregatorFunctionTest.java (added)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoublePercentileAggregatorFunctionTest.java Thu May 31 14:56:47 2012
@@ -0,0 +1,186 @@
+/*
+ * 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.DoublePercentileAggregatorFunction;
+import org.junit.Test;
+
+/**
+ * Unit test for {@link DoublePercentileAggregatorFunction}.
+ */
+public class DoublePercentileAggregatorFunctionTest extends BaseFunctorTest {
+ private static final double DELTA = 0.01; // make room for some poor
+ // floating point precision
+ private static final double DEF_PERC = 90; // by default use the 90th
+ // percentile
+
+ @Override
+ protected Object makeFunctor() throws Exception {
+ return new DoublePercentileAggregatorFunction(DEF_PERC);
+ }
+
+ @Test
+ public void testCreate() throws Exception {
+ // default
+ DoublePercentileAggregatorFunction fct = (DoublePercentileAggregatorFunction) makeFunctor();
+ assertTrue(fct.isUseCopy());
+ assertEquals(fct.getPercentile(), DEF_PERC, DELTA);
+
+ // different percentage
+ double perc = 50.0;
+ fct = new DoublePercentileAggregatorFunction(perc);
+ assertTrue(fct.isUseCopy());
+ assertEquals(fct.getPercentile(), perc, DELTA);
+
+ // use copy
+ fct = new DoublePercentileAggregatorFunction(perc, false);
+ assertFalse(fct.isUseCopy());
+ assertEquals(fct.getPercentile(), perc, DELTA);
+
+ // test illegal exc
+ boolean exc = false;
+ fct = null;
+ try {
+ fct = new DoublePercentileAggregatorFunction(-100);
+ } catch (IllegalArgumentException e) {
+ exc = true;
+ }
+ assertTrue(exc);
+
+ fct = null;
+ exc = false;
+ try {
+ fct = new DoublePercentileAggregatorFunction(101);
+ } catch (IllegalArgumentException e) {
+ exc = true;
+ }
+ assertTrue(exc);
+ }
+
+ @Test
+ public void testComputeRank() throws Exception {
+ List<Double> data = new ArrayList<Double>();
+ data.add(0.0);
+ data.add(1.0);
+ data.add(2.0);
+ data.add(3.0);
+ data.add(4.0);
+ // size of list is 5 now
+
+ // first item
+ DoublePercentileAggregatorFunction fct = new DoublePercentileAggregatorFunction(0.0);
+ int rank = fct.computeRank(data);
+ assertEquals(rank, 0);
+ assertEquals(data.get(rank).doubleValue(), 0.0, DELTA);
+ // last item
+ fct = new DoublePercentileAggregatorFunction(100.0);
+ rank = fct.computeRank(data);
+ assertEquals(rank, data.size() - 1);
+ assertEquals(data.get(rank).doubleValue(), 4.0, DELTA);
+
+ // middle one
+ fct = new DoublePercentileAggregatorFunction(50.0);
+ rank = fct.computeRank(data);
+ assertEquals(rank, 2);
+ assertEquals(data.get(rank).doubleValue(), 2.0, DELTA);
+
+ // 40% = 2nd item
+ fct = new DoublePercentileAggregatorFunction(40.0);
+ rank = fct.computeRank(data);
+ assertEquals(rank, 1);
+ assertEquals(data.get(rank).doubleValue(), 1.0, DELTA);
+
+ // 80% = 4th item
+ fct = new DoublePercentileAggregatorFunction(80.0);
+ rank = fct.computeRank(data);
+ assertEquals(rank, 3);
+ assertEquals(data.get(rank).doubleValue(), 3.0, DELTA);
+
+ // in between (e.g. 70%) means 3rd item
+ fct = new DoublePercentileAggregatorFunction(70.0);
+ rank = fct.computeRank(data);
+ assertEquals(rank, 2);
+ assertEquals(data.get(rank).doubleValue(), 2.0, DELTA);
+
+ // but 75% means 4th item
+ fct = new DoublePercentileAggregatorFunction(75.0);
+ rank = fct.computeRank(data);
+ assertEquals(rank, 3);
+ assertEquals(data.get(rank).doubleValue(), 3.0, DELTA);
+ }
+
+ @Test
+ public void testEvaluateNullEmpty() throws Exception {
+ DoublePercentileAggregatorFunction fct = (DoublePercentileAggregatorFunction) makeFunctor();
+ List<Double> data = null;
+ Double d = fct.evaluate(data);
+ assertNull(d);
+ data = new ArrayList<Double>();
+ d = fct.evaluate(data);
+ assertNull(d);
+ }
+
+ @Test
+ public void testEvaluateNoCopy() throws Exception {
+ // using a copy
+ DoublePercentileAggregatorFunction fct = (DoublePercentileAggregatorFunction) makeFunctor();
+ List<Double> data = new ArrayList<Double>();
+ data.add(4.0);
+ data.add(3.0);
+ data.add(2.0);
+ data.add(1.0);
+ data.add(0.0);
+ // size of list is 5 now
+
+ Double d = fct.evaluate(data);
+ assertEquals(d, 3.0, DELTA);
+ assertEquals(data.get(0), 4.0, DELTA);
+ assertEquals(data.get(1), 3.0, DELTA);
+ assertEquals(data.get(2), 2.0, DELTA);
+ assertEquals(data.get(3), 1.0, DELTA);
+ assertEquals(data.get(4), 0.0, DELTA);
+
+ // using a copy (explicitly)
+ fct = new DoublePercentileAggregatorFunction(DEF_PERC, true);
+ d = fct.evaluate(data);
+ assertEquals(d, 3.0, DELTA);
+ assertEquals(data.get(0), 4.0, DELTA);
+ assertEquals(data.get(1), 3.0, DELTA);
+ assertEquals(data.get(2), 2.0, DELTA);
+ assertEquals(data.get(3), 1.0, DELTA);
+ assertEquals(data.get(4), 0.0, DELTA);
+
+ // operate on the list directly
+ fct = new DoublePercentileAggregatorFunction(DEF_PERC, false);
+ d = fct.evaluate(data);
+ assertEquals(d, 3.0, DELTA);
+ assertEquals(data.get(4), 4.0, DELTA);
+ assertEquals(data.get(3), 3.0, DELTA);
+ assertEquals(data.get(2), 2.0, DELTA);
+ assertEquals(data.get(1), 1.0, DELTA);
+ assertEquals(data.get(0), 0.0, DELTA);
+ }
+}
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoublePercentileAggregatorFunctionTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoublePercentileAggregatorFunctionTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoublePercentileAggregatorFunctionTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleSumAggregatorBinaryFunctionTest.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleSumAggregatorBinaryFunctionTest.java?rev=1344757&view=auto
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleSumAggregatorBinaryFunctionTest.java (added)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleSumAggregatorBinaryFunctionTest.java Thu May 31 14:56:47 2012
@@ -0,0 +1,64 @@
+/*
+ * 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.DoubleSumAggregatorBinaryFunction;
+import org.junit.Test;
+
+/**
+ * Unit test for {@link DoubleSumAggregatorBinaryFunction}.
+ */
+public class DoubleSumAggregatorBinaryFunctionTest extends BaseFunctorTest {
+ private static final double DELTA = 0.01; //make room for some poor floating point support
+
+ @Override
+ protected Object makeFunctor() throws Exception {
+ return new DoubleSumAggregatorBinaryFunction();
+ }
+
+ @Test
+ public void testNulls() throws Exception {
+ DoubleSumAggregatorBinaryFunction fct = (DoubleSumAggregatorBinaryFunction)makeFunctor();
+ Double d = fct.evaluate(null, null);
+ assertNull( d );
+ d = fct.evaluate( null, 1.0 );
+ assertEquals( 1.0, d.doubleValue(), DELTA );
+ d = fct.evaluate( 2.0, null );
+ assertEquals( 2.0, d.doubleValue(), DELTA );
+ }
+
+ @Test
+ public void testSum() throws Exception {
+ DoubleSumAggregatorBinaryFunction fct = (DoubleSumAggregatorBinaryFunction)makeFunctor();
+ double total = 0.0;
+ double result = 0.0;
+ int calls = 31;
+ Random rnd = new Random();
+ for( int i = 0; i < calls; i++ ) {
+ double number = rnd.nextDouble();
+ total += number;
+ result = fct.evaluate(result, number);
+ assertEquals( result, total, DELTA );
+ }
+ }
+}
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleSumAggregatorBinaryFunctionTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleSumAggregatorBinaryFunctionTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleSumAggregatorBinaryFunctionTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleSumAggregatorFunctionTest.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleSumAggregatorFunctionTest.java?rev=1344757&view=auto
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleSumAggregatorFunctionTest.java (added)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleSumAggregatorFunctionTest.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.DoubleSumAggregatorFunction;
+import org.junit.Test;
+
+/**
+ * Unit test for {@link DoubleSumAggregatorFunction}.
+ */
+public class DoubleSumAggregatorFunctionTest extends BaseFunctorTest {
+ @Override
+ protected Object makeFunctor() throws Exception {
+ return new DoubleSumAggregatorFunction();
+ }
+
+ @Test
+ public void testEmptyList() throws Exception {
+ DoubleSumAggregatorFunction fct = (DoubleSumAggregatorFunction) makeFunctor();
+ List<Double> lst = null;
+ Double res = fct.evaluate(lst);
+ assertNull(res);
+ lst = new ArrayList<Double>();
+ res = fct.evaluate(lst);
+ assertNull(res);
+ }
+
+ @Test
+ public void testSum() throws Exception {
+ DoubleSumAggregatorFunction fct = (DoubleSumAggregatorFunction) makeFunctor();
+ List<Double> lst = new ArrayList<Double>();
+ lst.add(0.0);
+ double res = fct.evaluate(lst);
+ assertEquals(res, 0.0, 0.01);
+ lst.add(1.0);
+ res = fct.evaluate(lst);
+ assertEquals(res, 1.0, 0.01);
+ lst.add(2.0);
+ res = fct.evaluate(lst);
+ assertEquals(res, 3.0, 0.01);
+ // finally carry out a random addition
+ lst.clear();
+ int calls = 31;
+ double total = 0.0;
+ Random rnd = new Random();
+ for (int i = 0; i < calls; i++) {
+ double random = rnd.nextDouble();
+ lst.add(random);
+ total += random;
+ res = fct.evaluate(lst);
+ assertEquals(res, total, 0.01);
+ }
+ }
+}
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleSumAggregatorFunctionTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleSumAggregatorFunctionTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/DoubleSumAggregatorFunctionTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntCountAggregatorBinaryFunctionTest.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntCountAggregatorBinaryFunctionTest.java?rev=1344757&view=auto
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntCountAggregatorBinaryFunctionTest.java (added)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntCountAggregatorBinaryFunctionTest.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.aggregator.functions;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import org.apache.commons.functor.BaseFunctorTest;
+import org.apache.commons.functor.aggregator.functions.IntegerCountAggregatorBinaryFunction;
+import org.junit.Test;
+
+/**
+ * Unit test for {@link IntegerCountAggregatorBinaryFunction}.
+ */
+public class IntCountAggregatorBinaryFunctionTest extends BaseFunctorTest {
+ @Override
+ protected Object makeFunctor() throws Exception {
+ return new IntegerCountAggregatorBinaryFunction();
+ }
+
+ @Test
+ public void testNull() throws Exception {
+ IntegerCountAggregatorBinaryFunction fct = (IntegerCountAggregatorBinaryFunction)makeFunctor();
+ Integer i = fct.evaluate(null, null);
+ assertNull( i );
+ i = fct.evaluate( null, 1 );
+ assertNull( i );
+ i = fct.evaluate( 2, null );
+ assertNotNull( i );
+ assertEquals( i.intValue(), 3 );
+ }
+
+ @Test
+ public void testCount() throws Exception {
+ IntegerCountAggregatorBinaryFunction fct = (IntegerCountAggregatorBinaryFunction)makeFunctor();
+ int count = 0;
+ int calls = 31;
+ for( int i = 1; i <= calls; i++ ) {
+ count = fct.evaluate(count, 12345);
+ assertEquals( i, count );
+ }
+ }
+}
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntCountAggregatorBinaryFunctionTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntCountAggregatorBinaryFunctionTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntCountAggregatorBinaryFunctionTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntMaxAggregatorBinaryFunctionTest.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntMaxAggregatorBinaryFunctionTest.java?rev=1344757&view=auto
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntMaxAggregatorBinaryFunctionTest.java (added)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntMaxAggregatorBinaryFunctionTest.java Thu May 31 14:56:47 2012
@@ -0,0 +1,65 @@
+/*
+ * 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.IntegerMaxAggregatorBinaryFunction;
+import org.junit.Test;
+
+/**
+ * Unit test for {@link IntegerMaxAggregatorBinaryFunction}.
+ */
+public class IntMaxAggregatorBinaryFunctionTest extends BaseFunctorTest {
+ @Override
+ protected Object makeFunctor() throws Exception {
+ return new IntegerMaxAggregatorBinaryFunction();
+ }
+
+ @Test
+ public void testNulls() throws Exception {
+ IntegerMaxAggregatorBinaryFunction fct = (IntegerMaxAggregatorBinaryFunction) 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 testMax() throws Exception {
+ IntegerMaxAggregatorBinaryFunction fct = (IntegerMaxAggregatorBinaryFunction) makeFunctor();
+ int max = 0;
+ int result = 0;
+ int number1 = 0;
+ int number2 = 0;
+ int calls = 31;
+ Random rnd = new Random();
+ for (int i = 0; i < calls; i++) {
+ number1 = rnd.nextInt();
+ number2 = rnd.nextInt();
+ max = Math.max(number1, number2);
+ result = fct.evaluate(number1, number2);
+ assertEquals(result, max);
+ }
+ }
+}
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntMaxAggregatorBinaryFunctionTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntMaxAggregatorBinaryFunctionTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntMaxAggregatorBinaryFunctionTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntMaxAggregatorFunctionTest.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntMaxAggregatorFunctionTest.java?rev=1344757&view=auto
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntMaxAggregatorFunctionTest.java (added)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntMaxAggregatorFunctionTest.java Thu May 31 14:56:47 2012
@@ -0,0 +1,78 @@
+/*
+ * 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.IntegerMaxAggregatorFunction;
+import org.junit.Test;
+
+/**
+ * Unit test for {@link IntegerMaxAggregatorFunction}.
+ */
+public class IntMaxAggregatorFunctionTest extends BaseFunctorTest {
+ @Override
+ protected Object makeFunctor() throws Exception {
+ return new IntegerMaxAggregatorFunction();
+ }
+
+ @Test
+ public void testEmptyList() throws Exception {
+ IntegerMaxAggregatorFunction fct = (IntegerMaxAggregatorFunction) 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 {
+ IntegerMaxAggregatorFunction fct = (IntegerMaxAggregatorFunction) 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, 2);
+ // finally carry out a random addition
+ lst.clear();
+ int calls = 31;
+ int max = 0;
+ Random rnd = new Random();
+ for (int i = 0; i < calls; i++) {
+ int random = rnd.nextInt(Integer.MAX_VALUE / calls); //prevent overflow
+ lst.add(random);
+ if( random > max ) {
+ max = random;
+ }
+ res = fct.evaluate(lst);
+ assertEquals(res, max);
+ }
+ }
+}
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntMaxAggregatorFunctionTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntMaxAggregatorFunctionTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntMaxAggregatorFunctionTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntMeanValueAggregatorFunctionTest.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntMeanValueAggregatorFunctionTest.java?rev=1344757&view=auto
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntMeanValueAggregatorFunctionTest.java (added)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntMeanValueAggregatorFunctionTest.java Thu May 31 14:56:47 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.aggregator.functions;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.functor.BaseFunctorTest;
+import org.apache.commons.functor.aggregator.functions.IntegerMeanValueAggregatorFunction;
+import org.junit.Test;
+
+/**
+ * Unit test for {@link IntegerMeanValueAggregatorFunction}.
+ */
+public class IntMeanValueAggregatorFunctionTest extends BaseFunctorTest {
+ @Override
+ protected Object makeFunctor() throws Exception {
+ return new IntegerMeanValueAggregatorFunction();
+ }
+
+ @Test
+ public void testEmptyList() throws Exception {
+ IntegerMeanValueAggregatorFunction fct = (IntegerMeanValueAggregatorFunction) 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 testMean() throws Exception {
+ IntegerMeanValueAggregatorFunction fct = (IntegerMeanValueAggregatorFunction) 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, 0);
+ lst.add(2);
+ res = fct.evaluate(lst);
+ assertEquals(res, 1);
+ // finally carry out a random mean computation
+ int calls = 31;
+ int total;
+ for (int i = 2; i <= calls; i++) {
+ lst.clear();
+ total = 0;
+ for (int j = 1; j <= i; j++) {
+ lst.add(j);
+ total += j;
+ }
+ total /= i;
+ res = fct.evaluate(lst);
+ assertEquals(res, total);
+ }
+ }
+}
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntMeanValueAggregatorFunctionTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntMeanValueAggregatorFunctionTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntMeanValueAggregatorFunctionTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntMedianValueAggregatorFunctionTest.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntMedianValueAggregatorFunctionTest.java?rev=1344757&view=auto
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntMedianValueAggregatorFunctionTest.java (added)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntMedianValueAggregatorFunctionTest.java Thu May 31 14:56:47 2012
@@ -0,0 +1,137 @@
+/*
+ * 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.assertNotNull;
+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.IntegerMedianValueAggregatorFunction;
+import org.junit.Test;
+
+/**
+ * Unit test for {@link IntegerMedianValueAggregatorFunction}.
+ */
+public class IntMedianValueAggregatorFunctionTest extends BaseFunctorTest {
+ @Override
+ protected Object makeFunctor() throws Exception {
+ return new IntegerMedianValueAggregatorFunction();
+ }
+
+ @Test
+ public void testEmptyList() throws Exception {
+ IntegerMedianValueAggregatorFunction fct = (IntegerMedianValueAggregatorFunction) makeFunctor();
+ assertTrue(fct.isUseCopy());
+ List<Integer> lst = null;
+ Integer res = fct.evaluate(lst);
+ assertNull(res);
+ lst = new ArrayList<Integer>();
+ res = fct.evaluate(lst);
+ assertNull(res);
+ }
+
+ /**
+ * Ensure we compute the median correctly and also we don't affect the
+ * original list.
+ */
+ @Test
+ public void testMedianCopy() throws Exception {
+ IntegerMedianValueAggregatorFunction fct = new IntegerMedianValueAggregatorFunction(true);
+ assertTrue(fct.isUseCopy());
+ checkMedianCopy(fct);
+ // this is also the default behaviour so ensure that is the case
+ fct = (IntegerMedianValueAggregatorFunction) makeFunctor();
+ checkMedianCopy(fct);
+ }
+
+ /**
+ * Called by {@link #testMedianCopy()} internally.
+ */
+ void checkMedianCopy(IntegerMedianValueAggregatorFunction fct) throws Exception {
+ List<Integer> lst = new ArrayList<Integer>();
+ lst.add(10);
+ int res = fct.evaluate(lst);
+ assertEquals(res, 10);
+ assertListEqualsArray(lst, new int[] { 10 });
+ lst.add(1000);
+ res = fct.evaluate(lst);
+ assertEquals(res, 505);
+ assertListEqualsArray(lst, new int[] { 10, 1000 });
+ lst.add(30);
+ res = fct.evaluate(lst);
+ assertEquals(res, 30);
+ assertListEqualsArray(lst, new int[] { 10, 1000, 30 });
+ lst.add(100);
+ res = fct.evaluate(lst);
+ assertEquals(res, 65);
+ assertListEqualsArray(lst, new int[] { 10, 1000, 30, 100 });
+ lst.add(20);
+ res = fct.evaluate(lst);
+ assertEquals(res, 30);
+ assertListEqualsArray(lst, new int[] { 10, 1000, 30, 100, 20 });
+ }
+
+ /**
+ * Ensure we compute the median correctly and also we sort the original
+ * list.
+ */
+ @Test
+ public void testMedianNotCopy() throws Exception {
+ IntegerMedianValueAggregatorFunction fct = new IntegerMedianValueAggregatorFunction(false);
+ assertFalse(fct.isUseCopy());
+ List<Integer> lst = new ArrayList<Integer>();
+ lst.add(10);
+ int res = fct.evaluate(lst);
+ assertEquals(res, 10);
+ assertListEqualsArray(lst, new int[] { 10 });
+ lst.add(1000);
+ res = fct.evaluate(lst);
+ assertEquals(res, 505);
+ assertListEqualsArray(lst, new int[] { 10, 1000 });
+ lst.add(30);
+ res = fct.evaluate(lst);
+ assertEquals(res, 30);
+ assertListEqualsArray(lst, new int[] { 10, 30, 1000 });
+ lst.add(100);
+ res = fct.evaluate(lst);
+ assertEquals(res, 65);
+ assertListEqualsArray(lst, new int[] { 10, 30, 100, 1000 });
+ lst.add(20);
+ res = fct.evaluate(lst);
+ assertEquals(res, 30);
+ assertListEqualsArray(lst, new int[] { 10, 20, 30, 100, 1000 });
+ }
+
+ /**
+ * Utility function to check the elements of a list are in a given order.
+ * Simply build an inline array and pass it in the <code>arr</code>
+ * parameter.
+ */
+ void assertListEqualsArray(List<Integer> list, int arr[]) throws Exception {
+ assertNotNull(list);
+ assertNotNull(arr);
+ assertEquals(list.size(), arr.length);
+ for (int i = 0; i < arr.length; i++)
+ assertEquals(list.get(i).intValue(), arr[i]);
+ }
+}
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntMedianValueAggregatorFunctionTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntMedianValueAggregatorFunctionTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/aggregator/functions/IntMedianValueAggregatorFunctionTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain