test/jdk/jdk/jfr/jvm/TestFormatDuration.java
changeset 59312 43eee1237934
equal deleted inserted replaced
59311:b42eaca7d234 59312:43eee1237934
       
     1 /*
       
     2  * Copyright (c) 2019, 2019, Oracle and/or its affiliates. All rights reserved.
       
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       
     4  *
       
     5  * This code is free software; you can redistribute it and/or modify it
       
     6  * under the terms of the GNU General Public License version 2 only, as
       
     7  * published by the Free Software Foundation.  Oracle designates this
       
     8  * particular file as subject to the "Classpath" exception as provided
       
     9  * by Oracle in the LICENSE file that accompanied this code.
       
    10  *
       
    11  * This code is distributed in the hope that it will be useful, but WITHOUT
       
    12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    14  * version 2 for more details (a copy is included in the LICENSE file that
       
    15  * accompanied this code).
       
    16  *
       
    17  * You should have received a copy of the GNU General Public License version
       
    18  * 2 along with this work; if not, write to the Free Software Foundation,
       
    19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       
    20  *
       
    21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
       
    22  * or visit www.oracle.com if you need additional information or have any
       
    23  * questions.
       
    24  */
       
    25 package jdk.jfr.jvm;
       
    26 
       
    27 import jdk.jfr.internal.Utils;
       
    28 import jdk.test.lib.Asserts;
       
    29 
       
    30 import java.time.Duration;
       
    31 import java.util.Locale;
       
    32 
       
    33 /**
       
    34  * @test
       
    35  * @key jfr
       
    36  * @requires vm.hasJFR
       
    37  * @library /test/lib
       
    38  * @modules jdk.jfr/jdk.jfr.internal
       
    39  * @run main/othervm jdk.jfr.jvm.TestFormatDuration
       
    40  */
       
    41 public class TestFormatDuration {
       
    42     public static void main(String[] args) throws Exception{
       
    43         Locale.setDefault(Locale.US);
       
    44 
       
    45         // Nanoseconds
       
    46         assertDuration("0 ns   ", "0 s");
       
    47         assertDuration("1 ns   ", "0.000001 ms");
       
    48         assertDuration("10 ns  ", "0.000010 ms");
       
    49         assertDuration("100 ns ", "0.000100 ms");
       
    50         assertDuration("999 ns ", "0.000999 ms");
       
    51         assertDuration("1000 ns", "0.00100 ms");
       
    52         assertDuration("1004 ns", "0.00100 ms");
       
    53         assertDuration("1005 ns", "0.00101 ms");
       
    54 
       
    55         // 10 us
       
    56         assertDuration("9 us 994 ns", "0.00999 ms");
       
    57         assertDuration("9 us 995 ns", "0.0100 ms");
       
    58         assertDuration("10 us      ", "0.0100 ms");
       
    59         assertDuration("10 us 49 ns", "0.0100 ms");
       
    60         assertDuration("10 us 50 ns", "0.0101 ms");
       
    61 
       
    62         // 100 us
       
    63         assertDuration("99 us 949 ns ", "0.0999 ms");
       
    64         assertDuration("99 us 950 ns ", "0.100 ms");
       
    65         assertDuration("100 us       ", "0.100 ms");
       
    66         assertDuration("100 us 499 ns", "0.100 ms");
       
    67         assertDuration("100 us 500 ns", "0.101 ms");
       
    68 
       
    69         // 1 ms
       
    70         assertDuration("999 us 499 ns       ", "0.999 ms");
       
    71         assertDuration("999 us 500 ns       ", "1.00 ms");
       
    72         assertDuration("1 ms                ", "1.00 ms");
       
    73         assertDuration("1 ms 4 us 999 ns    ", "1.00 ms");
       
    74         assertDuration("1 ms 5 us", "1.01 ms");
       
    75 
       
    76         // 10 ms
       
    77         assertDuration("9 ms 994 us 999 ns", "9.99 ms");
       
    78         assertDuration("9 ms 995 us       ", "10.0 ms");
       
    79         assertDuration("10 ms             ", "10.0 ms");
       
    80         assertDuration("10 ms 49 us 999 ns", "10.0 ms");
       
    81         assertDuration("10 ms 50 us 999 ns", "10.1 ms");
       
    82 
       
    83         // 100 ms
       
    84         assertDuration("99 ms 949 us 999 ns ", "99.9 ms");
       
    85         assertDuration("99 ms 950 us 000 ns ", "100 ms");
       
    86         assertDuration("100 ms              ", "100 ms");
       
    87         assertDuration("100 ms 499 us 999 ns", "100 ms");
       
    88         assertDuration("100 ms 500 us       ", "101 ms");
       
    89 
       
    90         // 1 second
       
    91         assertDuration("999 ms 499 us 999 ns  ", "999 ms");
       
    92         assertDuration("999 ms 500 us         ", "1.00 s");
       
    93         assertDuration("1 s                   ", "1.00 s");
       
    94         assertDuration("1 s 4 ms 999 us 999 ns", "1.00 s");
       
    95         assertDuration("1 s 5 ms              ", "1.01 s");
       
    96 
       
    97         // 10 seconds
       
    98         assertDuration("9 s 994 ms 999 us 999 ns ", "9.99 s");
       
    99         assertDuration("9 s 995 ms               ", "10.0 s");
       
   100         assertDuration("10 s                     ", "10.0 s");
       
   101         assertDuration("10 s 049 ms 999 us 999 ns", "10.0 s");
       
   102         assertDuration("10 s 050 ms              ", "10.1 s");
       
   103 
       
   104         // 1 minute
       
   105         assertDuration("59 s 949 ms 999 us 999 ns", "59.9 s");
       
   106         assertDuration("59 s 950 ms              ", "1 m 0 s");
       
   107         assertDuration("1 m 0 s                  ", "1 m 0 s");
       
   108         assertDuration("60 s 499 ms 999 us 999 ns", "1 m 0 s");
       
   109         assertDuration("60 s 500 ms              ", "1 m 1 s");
       
   110 
       
   111         // 10 minutes
       
   112         assertDuration("10 m 0 s", "10 m 0 s");
       
   113 
       
   114         // 1 hour
       
   115         assertDuration("59 m 59 s 499 ms 999 us 999 ns", "59 m 59 s");
       
   116         assertDuration("59 m 59 s 500 ms              ", "1 h 0 m");
       
   117         assertDuration("1 h 0 m                       ", "1 h 0 m");
       
   118         assertDuration("1 h 29 s 999 ms 999 us 999 ns ", "1 h 0 m");
       
   119         assertDuration("1 h 30 s                      ", "1 h 1 m");
       
   120 
       
   121         // 1 day
       
   122         assertDuration("23 h 59 m 29 s 999 ms 999 us 999 ns", "23 h 59 m");
       
   123         assertDuration("23 h 59 m 30 s                     ", "1 d 0 h");
       
   124         assertDuration("1 d 0 h                            ", "1 d 0 h");
       
   125         assertDuration("1 d 29 m 59 s 999 ms 999 us 999 ns ", "1 d 0 h");
       
   126         assertDuration("1 d 30 m                           ", "1 d 1 h");
       
   127 
       
   128         // 100 days
       
   129         assertDuration("100 d 13 h", "100 d 13 h");
       
   130 
       
   131         // 1000 days
       
   132         assertDuration("1000 d 13 h", "1000 d 13 h");
       
   133     }
       
   134 
       
   135     private static void assertDuration(String value, String expected) throws Exception {
       
   136         long nanos = parse(value);
       
   137         System.out.println(value + " == " + expected + " ? (" + nanos + " ns) ");
       
   138         Asserts.assertEquals(Utils.formatDuration(Duration.ofNanos(nanos)), expected);
       
   139         if (nanos != 0) {
       
   140             Asserts.assertEquals(Utils.formatDuration(Duration.ofNanos(-nanos)), "-" + expected);
       
   141         }
       
   142     }
       
   143 
       
   144 
       
   145     private static long parse(String duration) throws Exception {
       
   146         String[] t = duration.trim().split(" ");
       
   147         long nanos = 0;
       
   148         for (int i = 0; i < t.length - 1; i += 2) {
       
   149             nanos += Long.parseLong(t[i]) * parseUnit(t[i + 1]);
       
   150         }
       
   151         return nanos;
       
   152     }
       
   153 
       
   154     private static long parseUnit(String unit) throws Exception {
       
   155         switch (unit) {
       
   156             case "ns":
       
   157                 return 1L;
       
   158             case "us":
       
   159                 return 1_000L;
       
   160             case "ms":
       
   161                 return 1_000_000L;
       
   162             case "s":
       
   163                 return 1_000_000_000L;
       
   164             case "m":
       
   165                 return 60 * 1_000_000_000L;
       
   166             case "h":
       
   167                 return 3600 * 1_000_000_000L;
       
   168             case "d":
       
   169                 return 24 * 3600 * 1_000_000_000L;
       
   170         }
       
   171         throw new Exception("Test error. Unknown unit " + unit);
       
   172     }
       
   173 }