Author: erans
Date: Thu Jan 6 15:30:23 2011
New Revision: 1055911
URL: http://svn.apache.org/viewvc?rev=1055911&view=rev
Log:
MATH-468
Utility methods to check that an argument is not NaN nor infinite.
Added:
commons/proper/math/trunk/src/main/java/org/apache/commons/math/exception/NotFiniteNumberException.java
(with props)
Modified:
commons/proper/math/trunk/src/main/java/org/apache/commons/math/exception/util/LocalizedFormats.java
commons/proper/math/trunk/src/main/resources/META-INF/localization/LocalizedFormats_fr.properties
commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/MathUtilsTest.java
Added:
commons/proper/math/trunk/src/main/java/org/apache/commons/math/exception/NotFiniteNumberException.java
URL:
http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/exception/NotFiniteNumberException.java?rev=1055911&view=auto
==============================================================================
---
commons/proper/math/trunk/src/main/java/org/apache/commons/math/exception/NotFiniteNumberException.java
(added)
+++
commons/proper/math/trunk/src/main/java/org/apache/commons/math/exception/NotFiniteNumberException.java
Thu Jan 6 15:30:23 2011
@@ -0,0 +1,56 @@
+/*
+ * 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.math.exception;
+
+import org.apache.commons.math.exception.util.Localizable;
+import org.apache.commons.math.exception.util.LocalizedFormats;
+
+/**
+ * Exception to be thrown when a number is not finite.
+ *
+ * @since 3.0
+ * @version $Revision$ $Date$
+ */
+public class NotFiniteNumberException extends MathIllegalNumberException {
+ /** Serializable version Id. */
+ private static final long serialVersionUID = -6100997100383932834L;
+
+ /**
+ * Construct the exception.
+ *
+ * @param wrong Value that is infinite or NaN.
+ * @param args Optional arguments.
+ */
+ public NotFiniteNumberException(Number wrong,
+ Object ... arguments) {
+ this(null, wrong, arguments);
+ }
+
+ /**
+ * Construct the exception with a specific context.
+ *
+ * @param specific Specific contexte pattern.
+ * @param wrong Value that is infinite or NaN.
+ * @param args Optional arguments.
+ */
+ public NotFiniteNumberException(Localizable specific,
+ Number wrong,
+ Object ... arguments) {
+ super(specific, LocalizedFormats.NOT_FINITE_NUMBER,
+ wrong, arguments);
+ }
+}
Propchange:
commons/proper/math/trunk/src/main/java/org/apache/commons/math/exception/NotFiniteNumberException.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
commons/proper/math/trunk/src/main/java/org/apache/commons/math/exception/util/LocalizedFormats.java
URL:
http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/exception/util/LocalizedFormats.java?rev=1055911&r1=1055910&r2=1055911&view=diff
==============================================================================
---
commons/proper/math/trunk/src/main/java/org/apache/commons/math/exception/util/LocalizedFormats.java
(original)
+++
commons/proper/math/trunk/src/main/java/org/apache/commons/math/exception/util/LocalizedFormats.java
Thu Jan 6 15:30:23 2011
@@ -114,6 +114,8 @@ public enum LocalizedFormats implements
INDEX_NOT_POSITIVE("index ({0}) is not positive"),
INDEX_OUT_OF_RANGE("index {0} out of allowed range [{1}, {2}]"),
INDEX("index ({0})"), /* keep */
+ NOT_FINITE_NUMBER("{0} is not a finite number"), /* keep */
+ ARRAY_ELEMENT("value {0} at index {1}"), /* keep */
INFINITE_ARRAY_ELEMENT("Array contains an infinite element, {0} at index
{1}"),
INFINITE_VALUE_CONVERSION("cannot convert infinite value"),
INITIAL_CAPACITY_NOT_POSITIVE("initial capacity ({0}) is not positive"),
Modified:
commons/proper/math/trunk/src/main/resources/META-INF/localization/LocalizedFormats_fr.properties
URL:
http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/resources/META-INF/localization/LocalizedFormats_fr.properties?rev=1055911&r1=1055910&r2=1055911&view=diff
==============================================================================
---
commons/proper/math/trunk/src/main/resources/META-INF/localization/LocalizedFormats_fr.properties
(original)
+++
commons/proper/math/trunk/src/main/resources/META-INF/localization/LocalizedFormats_fr.properties
Thu Jan 6 15:30:23 2011
@@ -86,6 +86,8 @@ INDEX_LARGER_THAN_MAX = l''index sp\u00e
INDEX_NOT_POSITIVE = l''indice ({0}) n''est pas positif
INDEX_OUT_OF_RANGE = l''indice ({0}) est hors du domaine autoris\u00e9 [{1},
{2}]
INDEX = indice ({0})
+NOT_FINITE_NUMBER = {0} n''est pas un nombre fini
+ARRAY_ELEMENT = valeur {0} Ã l''indice {1}
INFINITE_ARRAY_ELEMENT = le tableau contient l''\u00e9l\u00e9ment infini {0}
\u00e0 l''index {1}
INFINITE_VALUE_CONVERSION = les valeurs infinies ne peuvent \u00eatre
converties
INITIAL_CAPACITY_NOT_POSITIVE = la capacit\u00e9 initiale ({0}) n''est pas
positive
Modified:
commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/MathUtilsTest.java
URL:
http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/MathUtilsTest.java?rev=1055911&r1=1055910&r2=1055911&view=diff
==============================================================================
---
commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/MathUtilsTest.java
(original)
+++
commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/MathUtilsTest.java
Thu Jan 6 15:30:23 2011
@@ -27,6 +27,7 @@ import org.apache.commons.math.exception
import org.apache.commons.math.exception.MathIllegalArgumentException;
import org.apache.commons.math.exception.MathArithmeticException;
import org.apache.commons.math.exception.MathRuntimeException;
+import org.apache.commons.math.exception.NotFiniteNumberException;
import org.apache.commons.math.random.RandomDataImpl;
/**
@@ -1515,6 +1516,46 @@ public final class MathUtilsTest extends
}
}
+ public void testCheckFinite() {
+ try {
+ MathUtils.checkFinite(Double.POSITIVE_INFINITY);
+ fail("an exception should have been thrown");
+ } catch (NotFiniteNumberException e) {
+ // Expected
+ }
+ try {
+ MathUtils.checkFinite(Double.NEGATIVE_INFINITY);
+ fail("an exception should have been thrown");
+ } catch (NotFiniteNumberException e) {
+ // Expected
+ }
+ try {
+ MathUtils.checkFinite(Double.NaN);
+ fail("an exception should have been thrown");
+ } catch (NotFiniteNumberException e) {
+ // Expected
+ }
+
+ try {
+ MathUtils.checkFinite(new double[] {0, -1,
Double.POSITIVE_INFINITY, -2, 3});
+ fail("an exception should have been thrown");
+ } catch (NotFiniteNumberException e) {
+ // Expected
+ }
+ try {
+ MathUtils.checkFinite(new double[] {1, Double.NEGATIVE_INFINITY,
-2, 3});
+ fail("an exception should have been thrown");
+ } catch (NotFiniteNumberException e) {
+ // Expected
+ }
+ try {
+ MathUtils.checkFinite(new double[] {4, 3, -1, Double.NaN, -2, 1});
+ fail("an exception should have been thrown");
+ } catch (NotFiniteNumberException e) {
+ // Expected
+ }
+ }
+
public void testSortInPlace() {
final double[] x1 = {2, 5, -3, 1, 4};
final double[] x2 = {4, 25, 9, 1, 16};