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

ckj pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-uniffle.git


The following commit(s) were added to refs/heads/master by this push:
     new 47f5c579 Cleanup UnitConverter and improve UnitConverterTest (#504)
47f5c579 is described below

commit 47f5c57922d12d4326a74f20e995cdeec6867801
Author: Kaijie Chen <[email protected]>
AuthorDate: Fri Jan 20 00:02:35 2023 +0800

    Cleanup UnitConverter and improve UnitConverterTest (#504)
    
    ### What changes were proposed in this pull request?
    
    1. Remove unused code in UnitConverter.
    2. Make UnitConverter final, and constructor private.
    3. Improve coverage in UnitConverterTest.
    
    ### Why are the changes needed?
    
    Code quality and test coverage.
    
    ### Does this PR introduce _any_ user-facing change?
    
    No.
    
    ### How was this patch tested?
    
    Existing CI.
---
 .../apache/uniffle/common/util/UnitConverter.java  |  62 +---------
 .../uniffle/common/util/UnitConverterTest.java     | 129 +++++++++++++++------
 2 files changed, 100 insertions(+), 91 deletions(-)

diff --git 
a/common/src/main/java/org/apache/uniffle/common/util/UnitConverter.java 
b/common/src/main/java/org/apache/uniffle/common/util/UnitConverter.java
index 77f6e0eb..b4ff4921 100644
--- a/common/src/main/java/org/apache/uniffle/common/util/UnitConverter.java
+++ b/common/src/main/java/org/apache/uniffle/common/util/UnitConverter.java
@@ -26,7 +26,10 @@ import java.util.regex.Pattern;
 import com.google.common.collect.ImmutableMap;
 
 // copy from org.apache.spark.network.util.JavaUtils
-public class UnitConverter {
+public final class UnitConverter {
+
+  private UnitConverter() {
+  }
 
   private static final Map<String, ByteUnit> byteSuffixes =
       ImmutableMap.<String, ByteUnit>builder()
@@ -64,16 +67,6 @@ public class UnitConverter {
     return false;
   }
 
-  public static boolean isTimeString(String str) {
-    String strLower = str.toLowerCase();
-    for (String key: timeSuffixes.keySet()) {
-      if (strLower.contains(key)) {
-        return true;
-      }
-    }
-    return false;
-  }
-
   /**
    * Convert a passed byte string (e.g. 50b, 100kb, or 250mb) to the given. If 
no suffix is
    * provided, a direct conversion to the provided unit is attempted.
@@ -120,36 +113,6 @@ public class UnitConverter {
     return byteStringAs(str, ByteUnit.BYTE);
   }
 
-  /**
-   * Convert a passed byte string (e.g. 50b, 100k, or 250m) to kibibytes for
-   * internal use.
-   *
-   * If no suffix is provided, the passed number is assumed to be in kibibytes.
-   */
-  public static long byteStringAsKb(String str) {
-    return byteStringAs(str, ByteUnit.KiB);
-  }
-
-  /**
-   * Convert a passed byte string (e.g. 50b, 100k, or 250m) to mebibytes for
-   * internal use.
-   *
-   * If no suffix is provided, the passed number is assumed to be in mebibytes.
-   */
-  public static long byteStringAsMb(String str) {
-    return byteStringAs(str, ByteUnit.MiB);
-  }
-
-  /**
-   * Convert a passed byte string (e.g. 50b, 100k, or 250m) to gibibytes for
-   * internal use.
-   *
-   * If no suffix is provided, the passed number is assumed to be in gibibytes.
-   */
-  public static long byteStringAsGb(String str) {
-    return byteStringAs(str, ByteUnit.GiB);
-  }
-
   /**
    * Convert a passed time string (e.g. 50s, 100ms, or 250us) to a time count 
in the given unit.
    * The unit is also considered the default if the given string does not 
specify a unit.
@@ -185,21 +148,4 @@ public class UnitConverter {
       throw new NumberFormatException(timeError + "\n" + e.getMessage());
     }
   }
-
-  /**
-   * Convert a time parameter such as (50s, 100ms, or 250us) to milliseconds 
for internal use. If
-   * no suffix is provided, the passed number is assumed to be in ms.
-   */
-  public static long timeStringAsMs(String str) {
-    return timeStringAs(str, TimeUnit.MILLISECONDS);
-  }
-
-  /**
-   * Convert a time parameter such as (50s, 100ms, or 250us) to seconds for 
internal use. If
-   * no suffix is provided, the passed number is assumed to be in seconds.
-   */
-  public static long timeStringAsSec(String str) {
-    return timeStringAs(str, TimeUnit.SECONDS);
-  }
-
 }
diff --git 
a/common/src/test/java/org/apache/uniffle/common/util/UnitConverterTest.java 
b/common/src/test/java/org/apache/uniffle/common/util/UnitConverterTest.java
index 0f395601..f8e91101 100644
--- a/common/src/test/java/org/apache/uniffle/common/util/UnitConverterTest.java
+++ b/common/src/test/java/org/apache/uniffle/common/util/UnitConverterTest.java
@@ -17,9 +17,15 @@
 
 package org.apache.uniffle.common.util;
 
-import org.junit.jupiter.api.Test;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Stream;
+
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class UnitConverterTest {
 
@@ -29,37 +35,94 @@ public class UnitConverterTest {
   private static final long MB = (long)ByteUnit.MiB.toBytes(1L);
   private static final long KB = (long)ByteUnit.KiB.toBytes(1L);
 
-  @Test
-  public void testByteString() {
-
-    assertEquals(10 * PB, UnitConverter.byteStringAs("10PB", ByteUnit.BYTE));
-    assertEquals(10 * PB, UnitConverter.byteStringAs("10pb", ByteUnit.BYTE));
-    assertEquals(10 * PB, UnitConverter.byteStringAs("10pB", ByteUnit.BYTE));
-    assertEquals(10 * PB, UnitConverter.byteStringAs("10p", ByteUnit.BYTE));
-    assertEquals(10 * PB, UnitConverter.byteStringAs("10P", ByteUnit.BYTE));
-
-    assertEquals(10 * TB, UnitConverter.byteStringAs("10TB", ByteUnit.BYTE));
-    assertEquals(10 * TB, UnitConverter.byteStringAs("10tb", ByteUnit.BYTE));
-    assertEquals(10 * TB, UnitConverter.byteStringAs("10tB", ByteUnit.BYTE));
-    assertEquals(10 * TB, UnitConverter.byteStringAs("10T", ByteUnit.BYTE));
-    assertEquals(10 * TB, UnitConverter.byteStringAs("10t", ByteUnit.BYTE));
-
-    assertEquals(10 * GB, UnitConverter.byteStringAs("10GB", ByteUnit.BYTE));
-    assertEquals(10 * GB, UnitConverter.byteStringAs("10gb", ByteUnit.BYTE));
-    assertEquals(10 * GB, UnitConverter.byteStringAs("10gB", ByteUnit.BYTE));
-
-    assertEquals(10 * MB, UnitConverter.byteStringAs("10MB", ByteUnit.BYTE));
-    assertEquals(10 * MB, UnitConverter.byteStringAs("10mb", ByteUnit.BYTE));
-    assertEquals(10 * MB, UnitConverter.byteStringAs("10mB", ByteUnit.BYTE));
-    assertEquals(10 * MB, UnitConverter.byteStringAs("10M", ByteUnit.BYTE));
-    assertEquals(10 * MB, UnitConverter.byteStringAs("10m", ByteUnit.BYTE));
-
-    assertEquals(10 * KB, UnitConverter.byteStringAs("10KB", ByteUnit.BYTE));
-    assertEquals(10 * KB, UnitConverter.byteStringAs("10kb", ByteUnit.BYTE));
-    assertEquals(10 * KB, UnitConverter.byteStringAs("10Kb", ByteUnit.BYTE));
-    assertEquals(10 * KB, UnitConverter.byteStringAs("10K", ByteUnit.BYTE));
-    assertEquals(10 * KB, UnitConverter.byteStringAs("10k", ByteUnit.BYTE));
-
-    assertEquals(1111, UnitConverter.byteStringAs("1111", ByteUnit.BYTE));
+  private static Stream<Arguments> byteStringArgs() {
+    return Stream.of(
+        Arguments.arguments(10 * PB, "10PB", ByteUnit.BYTE),
+        Arguments.arguments(10 * PB, "10pb", ByteUnit.BYTE),
+        Arguments.arguments(10 * PB, "10pB", ByteUnit.BYTE),
+        Arguments.arguments(10 * PB, "10p", ByteUnit.BYTE),
+        Arguments.arguments(10 * PB, "10P", ByteUnit.BYTE),
+
+        Arguments.arguments(10 * TB, "10TB", ByteUnit.BYTE),
+        Arguments.arguments(10 * TB, "10tb", ByteUnit.BYTE),
+        Arguments.arguments(10 * TB, "10tB", ByteUnit.BYTE),
+        Arguments.arguments(10 * TB, "10T", ByteUnit.BYTE),
+        Arguments.arguments(10 * TB, "10t", ByteUnit.BYTE),
+
+        Arguments.arguments(10 * GB, "10GB", ByteUnit.BYTE),
+        Arguments.arguments(10 * GB, "10gb", ByteUnit.BYTE),
+        Arguments.arguments(10 * GB, "10gB", ByteUnit.BYTE),
+
+        Arguments.arguments(10 * MB, "10MB", ByteUnit.BYTE),
+        Arguments.arguments(10 * MB, "10mb", ByteUnit.BYTE),
+        Arguments.arguments(10 * MB, "10mB", ByteUnit.BYTE),
+        Arguments.arguments(10 * MB, "10M", ByteUnit.BYTE),
+        Arguments.arguments(10 * MB, "10m", ByteUnit.BYTE),
+
+        Arguments.arguments(10 * KB, "10KB", ByteUnit.BYTE),
+        Arguments.arguments(10 * KB, "10kb", ByteUnit.BYTE),
+        Arguments.arguments(10 * KB, "10Kb", ByteUnit.BYTE),
+        Arguments.arguments(10 * KB, "10K", ByteUnit.BYTE),
+        Arguments.arguments(10 * KB, "10k", ByteUnit.BYTE),
+
+        Arguments.arguments(1111L, "1111", ByteUnit.BYTE),
+
+        Arguments.arguments(null, "1/2", ByteUnit.BYTE),
+        Arguments.arguments(null, "10f", ByteUnit.BYTE),
+        Arguments.arguments(null, "f91", ByteUnit.BYTE),
+        Arguments.arguments(null, "1.0", ByteUnit.BYTE)
+    );
+  }
+
+  @ParameterizedTest
+  @MethodSource("byteStringArgs")
+  public void testByteString(Long expected, String value, ByteUnit unit) {
+    if (expected == null) {
+      assertThrows(NumberFormatException.class, () -> 
UnitConverter.byteStringAs(value, unit));
+    } else {
+      assertEquals(expected, UnitConverter.byteStringAs(value, unit));
+    }
+  }
+
+  private static final long US = TimeUnit.MICROSECONDS.toMicros(1L);
+  private static final long MS = TimeUnit.MILLISECONDS.toMicros(1L);
+  private static final long SEC = TimeUnit.SECONDS.toMicros(1L);
+  private static final long MIN = TimeUnit.MINUTES.toMicros(1L);
+  private static final long HOUR = TimeUnit.HOURS.toMicros(1L);
+  private static final long DAY = TimeUnit.DAYS.toMicros(1L);
+
+  private static Stream<Arguments> timeStringArgs() {
+    return Stream.of(
+        Arguments.arguments(3 * US, "3us", TimeUnit.MICROSECONDS),
+        Arguments.arguments(3 * MS, "3ms", TimeUnit.MICROSECONDS),
+        Arguments.arguments(3 * SEC, "3s", TimeUnit.MICROSECONDS),
+        Arguments.arguments(3 * MIN, "3m", TimeUnit.MICROSECONDS),
+        Arguments.arguments(3 * MIN, "3min", TimeUnit.MICROSECONDS),
+        Arguments.arguments(3 * HOUR, "3h", TimeUnit.MICROSECONDS),
+        Arguments.arguments(3 * DAY, "3d", TimeUnit.MICROSECONDS),
+
+        Arguments.arguments(5L, "5", TimeUnit.MILLISECONDS),
+        Arguments.arguments(5L, "5", TimeUnit.SECONDS),
+        Arguments.arguments(5L, "5", TimeUnit.MINUTES),
+
+        Arguments.arguments(null, "3ns", TimeUnit.MICROSECONDS),
+        Arguments.arguments(null, "3sec", TimeUnit.MICROSECONDS),
+        Arguments.arguments(null, "1.5h", TimeUnit.MICROSECONDS),
+        Arguments.arguments(null, "3hours", TimeUnit.MICROSECONDS),
+        Arguments.arguments(null, "3days", TimeUnit.MICROSECONDS),
+        Arguments.arguments(null, "3w", TimeUnit.MICROSECONDS),
+        Arguments.arguments(null, "3weeks", TimeUnit.MICROSECONDS),
+        Arguments.arguments(null, "foo", TimeUnit.MICROSECONDS)
+    );
+  }
+
+  @ParameterizedTest
+  @MethodSource("timeStringArgs")
+  public void testTimeString(Long expected, String value, TimeUnit unit) {
+    if (expected == null) {
+      assertThrows(NumberFormatException.class, () -> 
UnitConverter.timeStringAs(value, unit));
+    } else {
+      assertEquals(expected, UnitConverter.timeStringAs(value, unit));
+    }
   }
 }

Reply via email to