/*! ****************************************************************************** * * Pentaho Data Integration * * Copyright (C) 2002-2014 by Pentaho : http://www.pentaho.com * ******************************************************************************* * * Licensed 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.pentaho.di.trans.steps.univariatestats; import static org.junit.Assert.assertEquals; import java.util.ArrayList; import org.junit.Test; public class FieldIndexTest { @Test public void testCalculateDerived0Count() { FieldIndex fieldIndex = new FieldIndex(); fieldIndex.m_sum = 250; fieldIndex.m_count = 0; fieldIndex.m_sumSq = 35000.3; fieldIndex.calculateDerived(); assertEquals( Double.NaN, fieldIndex.m_mean, 0 ); assertEquals( Double.NaN, fieldIndex.m_stdDev, 0 ); } @Test public void testCalculateDerived1Count() { FieldIndex fieldIndex = new FieldIndex(); fieldIndex.m_sum = 250; fieldIndex.m_count = 1; fieldIndex.m_sumSq = 35000.3; fieldIndex.calculateDerived(); assertEquals( fieldIndex.m_sum / fieldIndex.m_count, fieldIndex.m_mean, 0 ); assertEquals( Double.POSITIVE_INFINITY, fieldIndex.m_stdDev, 0 ); } @Test public void testCalculateDerived3CountPositiveStdDev() { FieldIndex fieldIndex = new FieldIndex(); fieldIndex.m_sum = 250; fieldIndex.m_count = 3; fieldIndex.m_sumSq = 35000.3; fieldIndex.calculateDerived(); assertEquals( fieldIndex.m_sum / fieldIndex.m_count, fieldIndex.m_mean, 0 ); assertEquals( Math.sqrt( ( fieldIndex.m_sumSq - ( fieldIndex.m_sum * fieldIndex.m_sum ) / fieldIndex.m_count ) / ( fieldIndex.m_count - 1 ) ), fieldIndex.m_stdDev, 0 ); } @Test public void testCalculateDerived3CountNegativeStdDev() { FieldIndex fieldIndex = new FieldIndex(); fieldIndex.m_sum = 250; fieldIndex.m_count = 3; fieldIndex.m_sumSq = 350.3; fieldIndex.calculateDerived(); assertEquals( fieldIndex.m_sum / fieldIndex.m_count, fieldIndex.m_mean, 0 ); assertEquals( 0.0, fieldIndex.m_stdDev, 0 ); } @Test public void testGenerateOutputValuesNoCacheNoCalc() { FieldIndex fieldIndex = new FieldIndex(); Object[] outputValues = fieldIndex.generateOutputValues( new UnivariateStatsMetaFunction( null, false, false, false, false, false, false, -1, false ), null ); assertEquals( 0, outputValues.length ); } @Test public void testGenerateOutputValuesNoCacheAllCalc() { FieldIndex fieldIndex = new FieldIndex(); fieldIndex.m_count = 1; fieldIndex.m_mean = 2; fieldIndex.m_stdDev = 3; fieldIndex.m_min = 4; fieldIndex.m_max = 5; fieldIndex.m_median = 6; fieldIndex.m_arbitraryPercentile = 7; Object[] outputValues = fieldIndex.generateOutputValues( new UnivariateStatsMetaFunction( null, true, true, true, true, true, true, .55, false ), null ); int index = 0; assertEquals( ( (Double) outputValues[index++] ).doubleValue(), fieldIndex.m_count, 0 ); assertEquals( ( (Double) outputValues[index++] ).doubleValue(), fieldIndex.m_mean, 0 ); assertEquals( ( (Double) outputValues[index++] ).doubleValue(), fieldIndex.m_stdDev, 0 ); assertEquals( ( (Double) outputValues[index++] ).doubleValue(), fieldIndex.m_min, 0 ); assertEquals( ( (Double) outputValues[index++] ).doubleValue(), fieldIndex.m_max, 0 ); assertEquals( ( (Double) outputValues[index++] ).doubleValue(), fieldIndex.m_median, 0 ); assertEquals( ( (Double) outputValues[index++] ).doubleValue(), fieldIndex.m_arbitraryPercentile, 0 ); } @Test public void testGenerateOutputValuesCacheInterpolateSpecialCasesMin() { FieldIndex fieldIndex = new FieldIndex(); fieldIndex.m_count = 10; fieldIndex.m_min = -350; fieldIndex.m_max = 350; ArrayList<Number> cache = new ArrayList<Number>(); cache.add( 3 ); cache.add( 4 ); cache.add( 5 ); Object[] outputValues = fieldIndex.generateOutputValues( new UnivariateStatsMetaFunction( null, false, false, false, false, false, false, 0, true ), cache ); assertEquals( 1, outputValues.length ); assertEquals( fieldIndex.m_min, outputValues[0] ); } @Test public void testGenerateOutputValuesCacheInterpolateSpecialCasesMax() { FieldIndex fieldIndex = new FieldIndex(); fieldIndex.m_count = 10; fieldIndex.m_min = -350; fieldIndex.m_max = 350; ArrayList<Number> cache = new ArrayList<Number>(); cache.add( 3 ); cache.add( 4 ); cache.add( 5 ); Object[] outputValues = fieldIndex.generateOutputValues( new UnivariateStatsMetaFunction( null, false, false, false, false, false, false, 1, true ), cache ); assertEquals( 1, outputValues.length ); assertEquals( fieldIndex.m_max, outputValues[0] ); } @Test public void testGenerateOutputValuesCacheInterpolate() { FieldIndex fieldIndex = new FieldIndex(); fieldIndex.m_count = 5; fieldIndex.m_min = -350; fieldIndex.m_max = 350; ArrayList<Number> cache = new ArrayList<Number>(); cache.add( 3 ); cache.add( 4 ); cache.add( 5 ); cache.add( 6 ); cache.add( 7 ); Object[] outputValues = fieldIndex.generateOutputValues( new UnivariateStatsMetaFunction( null, false, false, false, false, false, false, .55, true ), cache ); assertEquals( 1, outputValues.length ); assertEquals( 5.3, ( (Double) outputValues[0] ).doubleValue(), .0005 ); } @Test public void testGenerateOutputValuesCacheSimpleSpecialCasesMin() { FieldIndex fieldIndex = new FieldIndex(); fieldIndex.m_count = 10; fieldIndex.m_min = -350; fieldIndex.m_max = 350; ArrayList<Number> cache = new ArrayList<Number>(); cache.add( 3 ); cache.add( 4 ); cache.add( 5 ); Object[] outputValues = fieldIndex.generateOutputValues( new UnivariateStatsMetaFunction( null, false, false, false, false, false, false, 0, false ), cache ); assertEquals( 1, outputValues.length ); assertEquals( fieldIndex.m_min, outputValues[0] ); } @Test public void testGenerateOutputValuesCacheSimpleSpecialCasesMax() { FieldIndex fieldIndex = new FieldIndex(); fieldIndex.m_count = 10; fieldIndex.m_min = -350; fieldIndex.m_max = 350; ArrayList<Number> cache = new ArrayList<Number>(); cache.add( 3 ); cache.add( 4 ); cache.add( 5 ); Object[] outputValues = fieldIndex.generateOutputValues( new UnivariateStatsMetaFunction( null, false, false, false, false, false, false, 1, false ), cache ); assertEquals( 1, outputValues.length ); assertEquals( fieldIndex.m_max, outputValues[0] ); } @Test public void testGenerateOutputValuesCacheSimpleOdd() { FieldIndex fieldIndex = new FieldIndex(); fieldIndex.m_count = 5; fieldIndex.m_min = -350; fieldIndex.m_max = 350; ArrayList<Number> cache = new ArrayList<Number>(); cache.add( 3 ); cache.add( 4 ); cache.add( 5 ); cache.add( 6 ); cache.add( 7 ); Object[] outputValues = fieldIndex.generateOutputValues( new UnivariateStatsMetaFunction( null, false, false, false, false, false, false, .50, false ), cache ); assertEquals( 1, outputValues.length ); assertEquals( 5.0, ( (Double) outputValues[0] ).doubleValue(), .0005 ); } @Test public void testGenerateOutputValuesCacheSimpleEven() { FieldIndex fieldIndex = new FieldIndex(); fieldIndex.m_count = 6; fieldIndex.m_min = -350; fieldIndex.m_max = 350; ArrayList<Number> cache = new ArrayList<Number>(); cache.add( 3 ); cache.add( 4 ); cache.add( 5 ); cache.add( 6 ); cache.add( 7 ); cache.add( 8 ); Object[] outputValues = fieldIndex.generateOutputValues( new UnivariateStatsMetaFunction( null, false, false, false, false, false, false, .50, false ), cache ); assertEquals( 1, outputValues.length ); assertEquals( 5.5, ( (Double) outputValues[0] ).doubleValue(), .0005 ); } }