152 lines · cpp
1// RUN: %check_clang_tidy -std=c++11-or-later %s abseil-duration-unnecessary-conversion %t -- -- -I %S/Inputs2 3#include "absl/time/time.h"4 5void f() {6 absl::Duration d1, d2;7 8 // Floating point9 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 point29 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 argument87#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: d2 = PLUS_FIVE_S(d1);91#undef PLUS_FIVE_S92 93 // Split by macro: should not change94#define TOSECONDS(x) absl::Seconds(x)95 d2 = TOSECONDS(absl::ToInt64Seconds(d1));96#undef TOSECONDS97 98 // Don't change something inside a macro definition99#define VALUE(x) absl::Hours(absl::ToInt64Hours(x));100 d2 = VALUE(d1);101#undef VALUE102 103 // Multiplication104 d2 = absl::Nanoseconds(absl::ToDoubleNanoseconds(d1) * 2);105 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion]106 // CHECK-FIXES: d2 = d1 * 2;107 d2 = absl::Microseconds(absl::ToInt64Microseconds(d1) * 2);108 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion]109 // CHECK-FIXES: d2 = d1 * 2;110 d2 = absl::Milliseconds(absl::ToDoubleMilliseconds(d1) * 2);111 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion]112 // CHECK-FIXES: d2 = d1 * 2;113 d2 = absl::Seconds(absl::ToInt64Seconds(d1) * 2);114 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion]115 // CHECK-FIXES: d2 = d1 * 2;116 d2 = absl::Minutes(absl::ToDoubleMinutes(d1) * 2);117 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion]118 // CHECK-FIXES: d2 = d1 * 2;119 d2 = absl::Hours(absl::ToInt64Hours(d1) * 2);120 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion]121 // CHECK-FIXES: d2 = d1 * 2;122 d2 = absl::Nanoseconds(2 * absl::ToDoubleNanoseconds(d1));123 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion]124 // CHECK-FIXES: d2 = 2 * d1;125 d2 = absl::Microseconds(2 * absl::ToInt64Microseconds(d1));126 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion]127 // CHECK-FIXES: d2 = 2 * d1;128 d2 = absl::Milliseconds(2 * absl::ToDoubleMilliseconds(d1));129 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion]130 // CHECK-FIXES: d2 = 2 * d1;131 d2 = absl::Seconds(2 * absl::ToInt64Seconds(d1));132 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion]133 // CHECK-FIXES: d2 = 2 * d1;134 d2 = absl::Minutes(2 * absl::ToDoubleMinutes(d1));135 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion]136 // CHECK-FIXES: d2 = 2 * d1;137 d2 = absl::Hours(2 * absl::ToInt64Hours(d1));138 // CHECK-MESSAGES: [[@LINE-1]]:8: warning: remove unnecessary absl::Duration conversions [abseil-duration-unnecessary-conversion]139 // CHECK-FIXES: d2 = 2 * d1;140 141 // These should not match142 d2 = absl::Seconds(absl::ToDoubleMilliseconds(d1));143 d2 = absl::Seconds(4);144 int i = absl::ToInt64Milliseconds(d1);145 d2 = absl::Hours(d1 / absl::Minutes(1));146 d2 = absl::Seconds(d1 / absl::Seconds(30));147 d2 = absl::Hours(absl::FDivDuration(d1, absl::Minutes(1)));148 d2 = absl::Milliseconds(absl::FDivDuration(d1, absl::Milliseconds(20)));149 d2 = absl::Seconds(absl::ToInt64Milliseconds(d1) * 2);150 d2 = absl::Milliseconds(absl::ToDoubleSeconds(d1) * 2);151}152