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;
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);
}
* @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));
+ }
+
}
@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));
}
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));
+ }
}