// RUN: %check_clang_tidy %s abseil-duration-subtraction %t -- -- -I %S/Inputs #include "absl/time/time.h" void f() { double x; absl::Duration d, d1, d2; x = absl::ToDoubleSeconds(d) - 1.0; // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the duration domain [abseil-duration-subtraction] // CHECK-FIXES: absl::ToDoubleSeconds(d - absl::Seconds(1)) x = absl::ToDoubleSeconds(d) - absl::ToDoubleSeconds(d1); // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the duration domain [abseil-duration-subtraction] // CHECK-FIXES: absl::ToDoubleSeconds(d - d1); x = absl::ToDoubleSeconds(d) - 6.5 - 8.0; // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the duration domain [abseil-duration-subtraction] // CHECK-FIXES: absl::ToDoubleSeconds(d - absl::Seconds(6.5)) - 8.0; x = absl::ToDoubleHours(d) - 1.0; // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the duration domain [abseil-duration-subtraction] // CHECK-FIXES: absl::ToDoubleHours(d - absl::Hours(1)) x = absl::ToDoubleMinutes(d) - 1; // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the duration domain [abseil-duration-subtraction] // CHECK-FIXES: absl::ToDoubleMinutes(d - absl::Minutes(1)) x = absl::ToDoubleMilliseconds(d) - 9; // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the duration domain [abseil-duration-subtraction] // CHECK-FIXES: absl::ToDoubleMilliseconds(d - absl::Milliseconds(9)) x = absl::ToDoubleMicroseconds(d) - 9; // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the duration domain [abseil-duration-subtraction] // CHECK-FIXES: absl::ToDoubleMicroseconds(d - absl::Microseconds(9)) x = absl::ToDoubleNanoseconds(d) - 42; // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the duration domain [abseil-duration-subtraction] // CHECK-FIXES: absl::ToDoubleNanoseconds(d - absl::Nanoseconds(42)) // We can rewrite the argument of the duration conversion #define THIRTY absl::Seconds(30) x = absl::ToDoubleSeconds(THIRTY) - 1.0; // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the duration domain [abseil-duration-subtraction] // CHECK-FIXES: absl::ToDoubleSeconds(THIRTY - absl::Seconds(1)) #undef THIRTY // Some other contexts if (absl::ToDoubleSeconds(d) - 1.0 > 10) {} // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the duration domain [abseil-duration-subtraction] // CHECK-FIXES: if (absl::ToDoubleSeconds(d - absl::Seconds(1)) > 10) {} // A nested occurance x = absl::ToDoubleSeconds(d) - absl::ToDoubleSeconds(absl::Seconds(5)); // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the duration domain [abseil-duration-subtraction] // CHECK-FIXES: absl::ToDoubleSeconds(d - absl::Seconds(5)) x = absl::ToDoubleSeconds(d) - absl::ToDoubleSeconds(absl::Seconds(absl::ToDoubleSeconds(d1))); // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the duration domain [abseil-duration-subtraction] // CHECK-FIXES: absl::ToDoubleSeconds(d - absl::Seconds(absl::ToDoubleSeconds(d1))) // These should not match x = 5 - 6; x = 4 - absl::ToDoubleSeconds(d) - 6.5 - 8.0; x = absl::ToDoubleSeconds(d) + 1.0; x = absl::ToDoubleSeconds(d) * 1.0; x = absl::ToDoubleSeconds(d) / 1.0; #define MINUS_FIVE(z) absl::ToDoubleSeconds(z) - 5 x = MINUS_FIVE(d); #undef MINUS_FIVE }