You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by er...@apache.org on 2019/10/22 13:45:33 UTC

[commons-numbers] 03/05: Allow "BigFraction" to be used as a field elements.

This is an automated email from the ASF dual-hosted git repository.

erans pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-numbers.git

commit 5c6b4b02f210724008aa2390315142f9eaa2cdd3
Author: Gilles Sadowski <gi...@harfang.homelinux.org>
AuthorDate: Tue Oct 22 11:11:42 2019 +0200

    Allow "BigFraction" to be used as a field elements.
---
 .../commons/numbers/field/BigFractionField.java    | 47 ++++++++++++++++++++++
 .../apache/commons/numbers/field/FieldsList.java   |  8 +++-
 .../commons/numbers/fraction/BigFraction.java      | 14 +++++++
 3 files changed, 67 insertions(+), 2 deletions(-)

diff --git a/commons-numbers-field/src/main/java/org/apache/commons/numbers/field/BigFractionField.java b/commons-numbers-field/src/main/java/org/apache/commons/numbers/field/BigFractionField.java
new file mode 100644
index 0000000..79e563f
--- /dev/null
+++ b/commons-numbers-field/src/main/java/org/apache/commons/numbers/field/BigFractionField.java
@@ -0,0 +1,47 @@
+/*
+ * 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.numbers.field;
+
+import org.apache.commons.numbers.fraction.BigFraction;
+
+/**
+ * {@link BigFraction} field.
+ */
+public class BigFractionField extends AbstractField<BigFraction> {
+    /** Singleton. */
+    private static final BigFractionField INSTANCE = new BigFractionField();
+
+    /** Singleton. */
+    private BigFractionField() {}
+
+    /** @return the field instance. */
+    public static BigFractionField get() {
+        return INSTANCE;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BigFraction one() {
+        return BigFraction.ONE;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BigFraction zero() {
+        return BigFraction.ZERO;
+    }
+}
diff --git a/commons-numbers-field/src/test/java/org/apache/commons/numbers/field/FieldsList.java b/commons-numbers-field/src/test/java/org/apache/commons/numbers/field/FieldsList.java
index a3c9143..a6bc264 100644
--- a/commons-numbers-field/src/test/java/org/apache/commons/numbers/field/FieldsList.java
+++ b/commons-numbers-field/src/test/java/org/apache/commons/numbers/field/FieldsList.java
@@ -22,6 +22,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 
 import org.apache.commons.numbers.fraction.Fraction;
+import org.apache.commons.numbers.fraction.BigFraction;
 
 /**
  * List of fields.
@@ -38,6 +39,10 @@ final class FieldsList {
                 Fraction.of(13, 4),
                 Fraction.of(5, 29),
                 Fraction.of(-279, 11));
+            add(BigFractionField.get(),
+                BigFraction.of(13256093L, 43951044L),
+                BigFraction.of(543016315L, 29L),
+                BigFraction.of(-27930919051L, 11L));
             add(FP64Field.get(),
                 FP64.of(23.45678901),
                 FP64.of(-543.2109876),
@@ -50,8 +55,7 @@ final class FieldsList {
         }
     }
 
-    private FieldsList() {
-    }
+    private FieldsList() {}
 
     /**
      * @param field Field.
diff --git a/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/BigFraction.java b/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/BigFraction.java
index c5c3fc3..4405d49 100644
--- a/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/BigFraction.java
+++ b/commons-numbers-fraction/src/main/java/org/apache/commons/numbers/fraction/BigFraction.java
@@ -21,6 +21,7 @@ import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.math.RoundingMode;
 import org.apache.commons.numbers.core.ArithmeticUtils;
+import org.apache.commons.numbers.core.NativeOperators;
 
 /**
  * Representation of a rational number without any overflow. This class is
@@ -29,6 +30,7 @@ import org.apache.commons.numbers.core.ArithmeticUtils;
 public class BigFraction
     extends Number
     implements Comparable<BigFraction>,
+               NativeOperators<BigFraction>,
                Serializable {
     /** A fraction representing "0". */
     public static final BigFraction ZERO = of(0);
@@ -1290,6 +1292,18 @@ public class BigFraction
         return str;
     }
 
+    /** {@inheritDoc} */
+    @Override
+    public BigFraction zero() {
+        return ZERO;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BigFraction one() {
+        return ONE;
+    }
+
     /**
      * Parses a string that would be produced by {@link #toString()}
      * and instantiates the corresponding object.