001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * 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, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    
018    package org.apache.commons.math.estimation;
019    
020    import org.apache.commons.math.estimation.EstimatedParameter;
021    import org.apache.commons.math.estimation.WeightedMeasurement;
022    
023    import junit.framework.*;
024    
025    @Deprecated
026    public class WeightedMeasurementTest
027      extends TestCase {
028    
029      public WeightedMeasurementTest(String name) {
030        super(name);
031        p1 = null;
032        p2 = null;
033      }
034    
035      public void testConstruction() {
036        WeightedMeasurement m = new MyMeasurement(3.0, theoretical() + 0.1, this);
037        checkValue(m.getWeight(), 3.0);
038        checkValue(m.getMeasuredValue(), theoretical() + 0.1);
039      }
040    
041      public void testIgnored() {
042        WeightedMeasurement m = new MyMeasurement(3.0, theoretical() + 0.1, this);
043        assertTrue(!m.isIgnored());
044        m.setIgnored(true);
045        assertTrue(m.isIgnored());
046        m.setIgnored(false);
047        assertTrue(!m.isIgnored());
048      }
049    
050      public void testTheory() {
051        WeightedMeasurement m = new MyMeasurement(3.0, theoretical() + 0.1, this);
052        checkValue(m.getTheoreticalValue(), theoretical());
053        checkValue(m.getResidual(), 0.1);
054    
055        double oldP1 = p1.getEstimate();
056        p1.setEstimate(oldP1 + m.getResidual() / m.getPartial(p1));
057        checkValue(m.getResidual(), 0.0);
058        p1.setEstimate(oldP1);
059        checkValue(m.getResidual(), 0.1);
060    
061        double oldP2 = p2.getEstimate();
062        p2.setEstimate(oldP2 + m.getResidual() / m.getPartial(p2));
063        checkValue(m.getResidual(), 0.0);
064        p2.setEstimate(oldP2);
065        checkValue(m.getResidual(), 0.1);
066    
067      }
068    
069      public static Test suite() {
070        return new TestSuite(WeightedMeasurementTest.class);
071      }
072    
073      @Override
074      public void setUp() {
075        p1 = new EstimatedParameter("p1", 1.0);
076        p2 = new EstimatedParameter("p2", 2.0);
077      }
078    
079      @Override
080      public void tearDown() {
081        p1 = null;
082        p2 = null;
083      }
084    
085      private void checkValue(double value, double expected) {
086       assertTrue(Math.abs(value - expected) < 1.0e-10);
087      }
088    
089      private double theoretical() {
090       return 3 * p1.getEstimate() - p2.getEstimate();
091      }
092    
093      private double partial(EstimatedParameter p) {
094        if (p == p1) {
095          return 3.0;
096        } else if (p == p2) {
097          return -1.0;
098        } else {
099          return 0.0;
100        }
101      }
102    
103      private static class MyMeasurement
104        extends WeightedMeasurement {
105    
106        public MyMeasurement(double weight, double measuredValue,
107                             WeightedMeasurementTest testInstance) {
108          super(weight, measuredValue);
109          this.testInstance = testInstance;
110        }
111    
112        @Override
113        public double getTheoreticalValue() {
114          return testInstance.theoretical();
115        }
116    
117        @Override
118        public double getPartial(EstimatedParameter p) {
119          return testInstance.partial(p);
120        }
121    
122        private transient WeightedMeasurementTest testInstance;
123    
124        private static final long serialVersionUID = -246712922500792332L;
125    
126      }
127    
128      private EstimatedParameter p1;
129      private EstimatedParameter p2;
130    
131    }