Add methods to GridUtils 61/94561/8
authormanuedelf <emmanuelle.delfour@orange.com>
Tue, 15 Dec 2020 07:17:39 +0000 (08:17 +0100)
committermanuedelf <emmanuelle.delfour@orange.com>
Tue, 12 Jan 2021 08:51:40 +0000 (09:51 +0100)
Add getCentralFrequencyWithPrecision and computeCentralFrequency.

JIRA: TRNSPRTPCE-230
Signed-off-by: manuedelf <emmanuelle.delfour@orange.com>
Change-Id: I2a451124344082dbf1fbb5bd5ff8e1d31e717c47

common/src/main/java/org/opendaylight/transportpce/common/fixedflex/GridUtils.java
common/src/test/java/org/opendaylight/transportpce/common/fixedflex/GridUtilsTest.java

index a3d13b22b918a223e9488b1612a1730f5c26c689..3e8bdafae3381e7faea710a806f3912e0ed8c84c 100644 (file)
@@ -9,6 +9,7 @@
 package org.opendaylight.transportpce.common.fixedflex;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
@@ -107,7 +108,7 @@ public final class GridUtils {
         if (width == null) {
             LOG.warn("No width found for service rate {} and modulation format {}, set width to 40", rate,
                     modulationFormat);
-            width = "40";
+            width = String.valueOf(GridConstant.WIDTH_40);
         }
         return FrequencyGHz.getDefaultInstance(width);
     }
@@ -119,8 +120,32 @@ public final class GridUtils {
      * @return central frequency in THz
      */
     public static FrequencyTHz getCentralFrequency(BigDecimal minFrequency, BigDecimal maxFrequency) {
-        return new FrequencyTHz(minFrequency.add(maxFrequency).divide(BigDecimal.valueOf(2)));
+        return new FrequencyTHz(computeCentralFrequency(minFrequency, maxFrequency));
 
     }
 
+    /**
+     * Get central frequency of spectrum with precision.
+     * @param minFrequency BigDecimal
+     * @param maxFrequency BigDecimal
+     * @param precision int
+     * @return central frequency in THz with precision
+     */
+    public static FrequencyTHz getCentralFrequencyWithPrecision(BigDecimal minFrequency,
+            BigDecimal maxFrequency, int precision) {
+        return new FrequencyTHz(computeCentralFrequency(minFrequency, maxFrequency)
+                .setScale(precision, RoundingMode.HALF_EVEN));
+
+    }
+
+    /**
+     * Compute central frequency from min and max frequency.
+     * @param minFrequency BigDecimal
+     * @param maxFrequency BigDecimal
+     * @return central frequency
+     */
+    private static BigDecimal computeCentralFrequency(BigDecimal minFrequency, BigDecimal maxFrequency) {
+        return minFrequency.add(maxFrequency).divide(BigDecimal.valueOf(2));
+    }
+
 }
index 3e7ed5835d8d8e3636a799d4f3947b031ae6103d..8f9f5f9adc65107decaba9383b0f56dfc3658f68 100644 (file)
@@ -77,14 +77,14 @@ public class GridUtilsTest {
 
     @Test
     public void getWidthFromRateAndModulationFormatTest() {
-        assertEquals("Width should be 80", FrequencyGHz.getDefaultInstance("80"),
+        assertEquals("Width should be 80", new FrequencyGHz(GridConstant.WIDTH_80),
                 GridUtils.getWidthFromRateAndModulationFormat(ServiceRateConstant.RATE_400,
                         ModulationFormat.DpQam16));
     }
 
     @Test
     public void getWidthFromRateAndModulationFormatNotFoundTest() {
-        assertEquals("As not found width should be 40", FrequencyGHz.getDefaultInstance("40"),
+        assertEquals("As not found width should be 40", new FrequencyGHz(GridConstant.WIDTH_40),
                 GridUtils.getWidthFromRateAndModulationFormat(ServiceRateConstant.RATE_100,
                         ModulationFormat.DpQam16));
     }
@@ -95,4 +95,20 @@ public class GridUtilsTest {
                 new FrequencyTHz(BigDecimal.valueOf(191.35).setScale(3)),
                 GridUtils.getCentralFrequency(BigDecimal.valueOf(191.325), BigDecimal.valueOf(191.375)));
     }
+
+    @Test
+    public void getCentralFrequencyWithPrecisionTest() {
+        assertEquals("Central frequency should be 191.3500",
+                new FrequencyTHz(BigDecimal.valueOf(191.35).setScale(4)),
+                GridUtils.getCentralFrequencyWithPrecision(BigDecimal.valueOf(191.325),
+                        BigDecimal.valueOf(191.375), 4));
+    }
+
+    @Test
+    public void getCentralFrequencyWithPrecisionAndRoundTest() {
+        assertEquals("Central frequency should be 191.3499",
+                new FrequencyTHz(BigDecimal.valueOf(191.3499)),
+                GridUtils.getCentralFrequencyWithPrecision(BigDecimal.valueOf(191.3244445),
+                        BigDecimal.valueOf(191.3754457788), 4));
+    }
 }