001 //Licensed to the Apache Software Foundation (ASF) under one 002 //or more contributor license agreements. See the NOTICE file 003 //distributed with this work for additional information 004 //regarding copyright ownership. The ASF licenses this file 005 //to you under the Apache License, Version 2.0 (the 006 //"License"); you may not use this file except in compliance 007 //with the License. You may obtain a copy of the License at 008 009 //http://www.apache.org/licenses/LICENSE-2.0 010 011 //Unless required by applicable law or agreed to in writing, 012 //software distributed under the License is distributed on an 013 //"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 014 //KIND, either express or implied. See the License for the 015 //specific language governing permissions and limitations 016 //under the License. 017 018 package org.apache.commons.math.stat.descriptive.moment; 019 020 import org.apache.commons.math.DimensionMismatchException; 021 import org.apache.commons.math.TestUtils; 022 023 import junit.framework.Test; 024 import junit.framework.TestCase; 025 import junit.framework.TestSuite; 026 027 public class VectorialMeanTest 028 extends TestCase { 029 030 public VectorialMeanTest(String name) { 031 super(name); 032 points = null; 033 } 034 035 public void testMismatch() { 036 try { 037 new VectorialMean(8).increment(new double[5]); 038 fail("an exception should have been thrown"); 039 } catch (DimensionMismatchException dme) { 040 assertEquals(5, dme.getDimension1()); 041 assertEquals(8, dme.getDimension2()); 042 } catch (Exception e) { 043 fail("wrong exception type caught: " + e.getClass().getName()); 044 } 045 } 046 047 public void testSimplistic() throws DimensionMismatchException { 048 VectorialMean stat = new VectorialMean(2); 049 stat.increment(new double[] {-1.0, 1.0}); 050 stat.increment(new double[] { 1.0, -1.0}); 051 double[] mean = stat.getResult(); 052 assertEquals(0.0, mean[0], 1.0e-12); 053 assertEquals(0.0, mean[1], 1.0e-12); 054 } 055 056 public void testBasicStats() throws DimensionMismatchException { 057 058 VectorialMean stat = new VectorialMean(points[0].length); 059 for (int i = 0; i < points.length; ++i) { 060 stat.increment(points[i]); 061 } 062 063 assertEquals(points.length, stat.getN()); 064 065 double[] mean = stat.getResult(); 066 double[] refMean = new double[] { 1.78, 1.62, 3.12}; 067 068 for (int i = 0; i < mean.length; ++i) { 069 assertEquals(refMean[i], mean[i], 1.0e-12); 070 } 071 072 } 073 074 public void testSerial() throws DimensionMismatchException { 075 VectorialMean stat = new VectorialMean(points[0].length); 076 for (int i = 0; i < points.length; ++i) { 077 stat.increment(points[i]); 078 } 079 assertEquals(stat, TestUtils.serializeAndRecover(stat)); 080 } 081 @Override 082 public void setUp() { 083 points = new double[][] { 084 { 1.2, 2.3, 4.5}, 085 {-0.7, 2.3, 5.0}, 086 { 3.1, 0.0, -3.1}, 087 { 6.0, 1.2, 4.2}, 088 {-0.7, 2.3, 5.0} 089 }; 090 } 091 092 @Override 093 public void tearDown() { 094 points = null; 095 } 096 097 public static Test suite() { 098 return new TestSuite(VectorialMeanTest.class); 099 } 100 101 private double [][] points; 102 103 }