1 // RUN: %check_clang_tidy -std=c++11-or-later %s abseil-duration-unnecessary-conversion %t -- -- -I %S/Inputs 2 3 #include "absl/time/time.h" 4 f()5void f() { 6 absl::Duration d1, d2; 7 8 // Floating point 9 d2 = absl::Hours(absl::ToDoubleHours(d1)); 10 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion] 11 // CHECK-FIXES: d2 = d1 12 d2 = absl::Minutes(absl::ToDoubleMinutes(d1)); 13 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion] 14 // CHECK-FIXES: d2 = d1 15 d2 = absl::Seconds(absl::ToDoubleSeconds(d1)); 16 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion] 17 // CHECK-FIXES: d2 = d1 18 d2 = absl::Milliseconds(absl::ToDoubleMilliseconds(d1)); 19 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion] 20 // CHECK-FIXES: d2 = d1 21 d2 = absl::Microseconds(absl::ToDoubleMicroseconds(d1)); 22 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion] 23 // CHECK-FIXES: d2 = d1 24 d2 = absl::Nanoseconds(absl::ToDoubleNanoseconds(d1)); 25 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion] 26 // CHECK-FIXES: d2 = d1 27 28 // Integer point 29 d2 = absl::Hours(absl::ToInt64Hours(d1)); 30 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion] 31 // CHECK-FIXES: d2 = d1 32 d2 = absl::Minutes(absl::ToInt64Minutes(d1)); 33 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion] 34 // CHECK-FIXES: d2 = d1 35 d2 = absl::Seconds(absl::ToInt64Seconds(d1)); 36 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion] 37 // CHECK-FIXES: d2 = d1 38 d2 = absl::Milliseconds(absl::ToInt64Milliseconds(d1)); 39 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion] 40 // CHECK-FIXES: d2 = d1 41 d2 = absl::Microseconds(absl::ToInt64Microseconds(d1)); 42 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion] 43 // CHECK-FIXES: d2 = d1 44 d2 = absl::Nanoseconds(absl::ToInt64Nanoseconds(d1)); 45 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion] 46 // CHECK-FIXES: d2 = d1 47 48 d2 = absl::Hours(d1 / absl::Hours(1)); 49 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion] 50 // CHECK-FIXES: d2 = d1 51 d2 = absl::Minutes(d1 / absl::Minutes(1)); 52 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion] 53 // CHECK-FIXES: d2 = d1 54 d2 = absl::Seconds(d1 / absl::Seconds(1)); 55 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion] 56 // CHECK-FIXES: d2 = d1 57 d2 = absl::Milliseconds(d1 / absl::Milliseconds(1)); 58 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion] 59 // CHECK-FIXES: d2 = d1 60 d2 = absl::Microseconds(d1 / absl::Microseconds(1)); 61 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion] 62 // CHECK-FIXES: d2 = d1 63 d2 = absl::Nanoseconds(d1 / absl::Nanoseconds(1)); 64 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion] 65 // CHECK-FIXES: d2 = d1 66 67 d2 = absl::Hours(absl::FDivDuration(d1, absl::Hours(1))); 68 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion] 69 // CHECK-FIXES: d2 = d1 70 d2 = absl::Minutes(absl::FDivDuration(d1, absl::Minutes(1))); 71 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion] 72 // CHECK-FIXES: d2 = d1 73 d2 = absl::Seconds(absl::FDivDuration(d1, absl::Seconds(1))); 74 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion] 75 // CHECK-FIXES: d2 = d1 76 d2 = absl::Milliseconds(absl::FDivDuration(d1, absl::Milliseconds(1))); 77 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion] 78 // CHECK-FIXES: d2 = d1 79 d2 = absl::Microseconds(absl::FDivDuration(d1, absl::Microseconds(1))); 80 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion] 81 // CHECK-FIXES: d2 = d1 82 d2 = absl::Nanoseconds(absl::FDivDuration(d1, absl::Nanoseconds(1))); 83 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion] 84 // CHECK-FIXES: d2 = d1 85 86 // As macro argument 87 #define PLUS_FIVE_S(x) x + absl::Seconds(5) 88 d2 = PLUS_FIVE_S(absl::Seconds(absl::ToInt64Seconds(d1))); 89 // CHECK-MESSAGES: [[@LINE-1]]:20: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion] 90 // CHECK-FIXES: PLUS_FIVE_S(d1) 91 #undef PLUS_FIVE_S 92 93 // Split by macro: should not change 94 #define TOSECONDS(x) absl::Seconds(x) 95 d2 = TOSECONDS(absl::ToInt64Seconds(d1)); 96 #undef TOSECONDS 97 98 // Don't change something inside a macro definition 99 #define VALUE(x) absl::Hours(absl::ToInt64Hours(x)); 100 d2 = VALUE(d1); 101 #undef VALUE 102 103 // These should not match 104 d2 = absl::Seconds(absl::ToDoubleMilliseconds(d1)); 105 d2 = absl::Seconds(4); 106 int i = absl::ToInt64Milliseconds(d1); 107 d2 = absl::Hours(d1 / absl::Minutes(1)); 108 d2 = absl::Seconds(d1 / absl::Seconds(30)); 109 d2 = absl::Hours(absl::FDivDuration(d1, absl::Minutes(1))); 110 d2 = absl::Milliseconds(absl::FDivDuration(d1, absl::Milliseconds(20))); 111 } 112