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 import org.apache.commons.math.linear.RealMatrix;
023
024 import junit.framework.Test;
025 import junit.framework.TestCase;
026 import junit.framework.TestSuite;
027
028 public class VectorialCovarianceTest
029 extends TestCase {
030
031 public VectorialCovarianceTest(String name) {
032 super(name);
033 points = null;
034 }
035
036 public void testMismatch() {
037 try {
038 new VectorialCovariance(8, true).increment(new double[5]);
039 fail("an exception should have been thrown");
040 } catch (DimensionMismatchException dme) {
041 assertEquals(5, dme.getDimension1());
042 assertEquals(8, dme.getDimension2());
043 } catch (Exception e) {
044 fail("wrong exception type caught: " + e.getClass().getName());
045 }
046 }
047
048 public void testSimplistic() throws DimensionMismatchException {
049 VectorialCovariance stat = new VectorialCovariance(2, true);
050 stat.increment(new double[] {-1.0, 1.0});
051 stat.increment(new double[] { 1.0, -1.0});
052 RealMatrix c = stat.getResult();
053 assertEquals( 2.0, c.getEntry(0, 0), 1.0e-12);
054 assertEquals(-2.0, c.getEntry(1, 0), 1.0e-12);
055 assertEquals( 2.0, c.getEntry(1, 1), 1.0e-12);
056 }
057
058 public void testBasicStats() throws DimensionMismatchException {
059
060 VectorialCovariance stat = new VectorialCovariance(points[0].length, true);
061 for (int i = 0; i < points.length; ++i) {
062 stat.increment(points[i]);
063 }
064
065 assertEquals(points.length, stat.getN());
066
067 RealMatrix c = stat.getResult();
068 double[][] refC = new double[][] {
069 { 8.0470, -1.9195, -3.4445},
070 {-1.9195, 1.0470, 3.2795},
071 {-3.4445, 3.2795, 12.2070}
072 };
073
074 for (int i = 0; i < c.getRowDimension(); ++i) {
075 for (int j = 0; j <= i; ++j) {
076 assertEquals(refC[i][j], c.getEntry(i, j), 1.0e-12);
077 }
078 }
079
080 }
081
082 public void testSerial(){
083 VectorialCovariance stat = new VectorialCovariance(points[0].length, true);
084 assertEquals(stat, TestUtils.serializeAndRecover(stat));
085 }
086
087 @Override
088 public void setUp() {
089 points = new double[][] {
090 { 1.2, 2.3, 4.5},
091 {-0.7, 2.3, 5.0},
092 { 3.1, 0.0, -3.1},
093 { 6.0, 1.2, 4.2},
094 {-0.7, 2.3, 5.0}
095 };
096 }
097
098 @Override
099 public void tearDown() {
100 points = null;
101 }
102
103 public static Test suite() {
104 return new TestSuite(VectorialCovarianceTest.class);
105 }
106
107 private double [][] points;
108
109 }