108 lines · cpp
1// RUN: %check_clang_tidy %s abseil-duration-factory-float %t -- -- -I%S/Inputs2 3#include "absl/time/time.h"4 5void ConvertFloatTest() {6 absl::Duration d;7 8 d = absl::Seconds(60.0);9 // CHECK-MESSAGES: [[@LINE-1]]:7: warning: use the integer version of absl::Seconds [abseil-duration-factory-float]10 // CHECK-FIXES: d = absl::Seconds(60);11 d = absl::Minutes(300.0);12 // CHECK-MESSAGES: [[@LINE-1]]:7: warning: use the integer version of absl::Minutes [abseil-duration-factory-float]13 // CHECK-FIXES: d = absl::Minutes(300);14 15 d = absl::Milliseconds(1e2);16 // CHECK-MESSAGES: [[@LINE-1]]:7: warning: use the integer version of absl::Milliseconds [abseil-duration-factory-float]17 // CHECK-FIXES: d = absl::Milliseconds(100);18 d = absl::Seconds(3.0f);19 // CHECK-MESSAGES: [[@LINE-1]]:7: warning: use the integer version of absl::Seconds [abseil-duration-factory-float]20 // CHECK-FIXES: d = absl::Seconds(3);21 d = absl::Seconds(3.);22 // CHECK-MESSAGES: [[@LINE-1]]:7: warning: use the integer version of absl::Seconds [abseil-duration-factory-float]23 // CHECK-FIXES: d = absl::Seconds(3);24 d = absl::Seconds(0x3.p0);25 // CHECK-MESSAGES: [[@LINE-1]]:7: warning: use the integer version of absl::Seconds [abseil-duration-factory-float]26 // CHECK-FIXES: d = absl::Seconds(3);27 d = absl::Seconds(0x3.p1);28 // CHECK-MESSAGES: [[@LINE-1]]:7: warning: use the integer version of absl::Seconds [abseil-duration-factory-float]29 // CHECK-FIXES: d = absl::Seconds(6);30 31 32 // Ignored expressions33 d = absl::Seconds(.001);34 d = absl::Seconds(.100);35 d = ::absl::Seconds(1);36 d = ::absl::Minutes(1);37 d = ::absl::Hours(1);38 d = absl::Seconds(0x3.4p1);39 40 // Negative literals (we don't yet handle this case)41 d = absl::Seconds(-3.0);42 43 // This is bigger than we can safely fit in a positive int32, so we ignore it.44 d = absl::Seconds(1e12);45 46 int x;47 d = absl::Seconds(x);48 float y;49 d = absl::Minutes(y);50 51#define SECONDS(x) absl::Seconds(x)52 SECONDS(60);53#undef SECONDS54#define THIRTY 30.055 d = absl::Seconds(THIRTY);56#undef THIRTY57}58 59template <int N>60void InTemplate() {61 absl::Duration d;62 63 d = absl::Seconds(N); // 164 // ^ No replacement here.65 66 d = absl::Minutes(1.0); // 267 // CHECK-MESSAGES: [[@LINE-1]]:7: warning: use the integer version of absl::Minutes [abseil-duration-factory-float]68 // CHECK-FIXES: d = absl::Minutes(1); // 269}70 71void Instantiate() {72 InTemplate<60>();73 InTemplate<1>();74}75 76void ConvertCastTest() {77 absl::Duration d;78 79 d = absl::Seconds(static_cast<double>(5));80 // CHECK-MESSAGES: [[@LINE-1]]:7: warning: use the integer version of absl::Seconds [abseil-duration-factory-float]81 // CHECK-FIXES: d = absl::Seconds(5);82 83 d = absl::Minutes(static_cast<float>(5));84 // CHECK-MESSAGES: [[@LINE-1]]:7: warning: use the integer version of absl::Minutes [abseil-duration-factory-float]85 // CHECK-FIXES: d = absl::Minutes(5);86 87 d = absl::Seconds((double) 5);88 // CHECK-MESSAGES: [[@LINE-1]]:7: warning: use the integer version of absl::Seconds [abseil-duration-factory-float]89 // CHECK-FIXES: d = absl::Seconds(5);90 91 d = absl::Minutes((float) 5);92 // CHECK-MESSAGES: [[@LINE-1]]:7: warning: use the integer version of absl::Minutes [abseil-duration-factory-float]93 // CHECK-FIXES: d = absl::Minutes(5);94 95 d = absl::Seconds(double(5));96 // CHECK-MESSAGES: [[@LINE-1]]:7: warning: use the integer version of absl::Seconds [abseil-duration-factory-float]97 // CHECK-FIXES: d = absl::Seconds(5);98 99 d = absl::Minutes(float(5));100 // CHECK-MESSAGES: [[@LINE-1]]:7: warning: use the integer version of absl::Minutes [abseil-duration-factory-float]101 // CHECK-FIXES: d = absl::Minutes(5);102 103 // This should not be flagged104 d = absl::Seconds(static_cast<int>(5.0));105 d = absl::Seconds((int) 5.0);106 d = absl::Seconds(int(5.0));107}108