gfe-relnote: (n/a) Add a wrapper macro for quic::test::ExpectApproxEq for better error report in tests. Test only.

The new EXPECT_APPROX_EQ macro shows the filename:linenumber of the callsite, the existing function does not.

PiperOrigin-RevId: 246420815
Change-Id: Ife5706cf77261a4f1d120946f4d0acd400076afd
diff --git a/quic/test_tools/quic_test_utils.h b/quic/test_tools/quic_test_utils.h
index 08337da..91f25d5 100644
--- a/quic/test_tools/quic_test_utils.h
+++ b/quic/test_tools/quic_test_utils.h
@@ -1128,7 +1128,8 @@
 
 // Verifies that the relative error of |actual| with respect to |expected| is
 // no more than |margin|.
-
+// Please use EXPECT_APPROX_EQ, a wrapper around this function, for better error
+// report.
 template <typename T>
 void ExpectApproxEq(T expected, T actual, float relative_margin) {
   // If |relative_margin| > 1 and T is an unsigned type, the comparison will
@@ -1138,10 +1139,16 @@
 
   T absolute_margin = expected * relative_margin;
 
-  EXPECT_GE(expected + absolute_margin, actual);
-  EXPECT_LE(expected - absolute_margin, actual);
+  EXPECT_GE(expected + absolute_margin, actual) << "actual value too big";
+  EXPECT_LE(expected - absolute_margin, actual) << "actual value too small";
 }
 
+#define EXPECT_APPROX_EQ(expected, actual, relative_margin)                    \
+  do {                                                                         \
+    SCOPED_TRACE(testing::Message() << "relative_margin:" << relative_margin); \
+    quic::test::ExpectApproxEq(expected, actual, relative_margin);             \
+  } while (0)
+
 template <typename T>
 QuicHeaderList AsHeaderList(const T& container) {
   QuicHeaderList l;
diff --git a/quic/test_tools/quic_test_utils_test.cc b/quic/test_tools/quic_test_utils_test.cc
index 8c30335..31e4804 100644
--- a/quic/test_tools/quic_test_utils_test.cc
+++ b/quic/test_tools/quic_test_utils_test.cc
@@ -22,29 +22,29 @@
 }
 
 TEST_F(QuicTestUtilsTest, BasicApproxEq) {
-  ExpectApproxEq(10, 10, 1e-6f);
-  ExpectApproxEq(1000, 1001, 0.01f);
-  EXPECT_NONFATAL_FAILURE(ExpectApproxEq(1000, 1100, 0.01f), "");
+  EXPECT_APPROX_EQ(10, 10, 1e-6f);
+  EXPECT_APPROX_EQ(1000, 1001, 0.01f);
+  EXPECT_NONFATAL_FAILURE(EXPECT_APPROX_EQ(1000, 1100, 0.01f), "");
 
-  ExpectApproxEq(64, 31, 0.55f);
-  EXPECT_NONFATAL_FAILURE(ExpectApproxEq(31, 64, 0.55f), "");
+  EXPECT_APPROX_EQ(64, 31, 0.55f);
+  EXPECT_NONFATAL_FAILURE(EXPECT_APPROX_EQ(31, 64, 0.55f), "");
 }
 
 TEST_F(QuicTestUtilsTest, QuicTimeDelta) {
-  ExpectApproxEq(QuicTime::Delta::FromMicroseconds(1000),
-                 QuicTime::Delta::FromMicroseconds(1003), 0.01f);
+  EXPECT_APPROX_EQ(QuicTime::Delta::FromMicroseconds(1000),
+                   QuicTime::Delta::FromMicroseconds(1003), 0.01f);
   EXPECT_NONFATAL_FAILURE(
-      ExpectApproxEq(QuicTime::Delta::FromMicroseconds(1000),
-                     QuicTime::Delta::FromMicroseconds(1200), 0.01f),
+      EXPECT_APPROX_EQ(QuicTime::Delta::FromMicroseconds(1000),
+                       QuicTime::Delta::FromMicroseconds(1200), 0.01f),
       "");
 }
 
 TEST_F(QuicTestUtilsTest, QuicBandwidth) {
-  ExpectApproxEq(QuicBandwidth::FromBytesPerSecond(1000),
-                 QuicBandwidth::FromBitsPerSecond(8005), 0.01f);
+  EXPECT_APPROX_EQ(QuicBandwidth::FromBytesPerSecond(1000),
+                   QuicBandwidth::FromBitsPerSecond(8005), 0.01f);
   EXPECT_NONFATAL_FAILURE(
-      ExpectApproxEq(QuicBandwidth::FromBytesPerSecond(1000),
-                     QuicBandwidth::FromBitsPerSecond(9005), 0.01f),
+      EXPECT_APPROX_EQ(QuicBandwidth::FromBytesPerSecond(1000),
+                       QuicBandwidth::FromBitsPerSecond(9005), 0.01f),
       "");
 }
 
diff --git a/quic/test_tools/simulator/simulator_test.cc b/quic/test_tools/simulator/simulator_test.cc
index 33ad564..1e7a8ce 100644
--- a/quic/test_tools/simulator/simulator_test.cc
+++ b/quic/test_tools/simulator/simulator_test.cc
@@ -224,7 +224,7 @@
   const QuicTime end_time = simulator.GetClock()->Now();
   const QuicBandwidth observed_bandwidth = QuicBandwidth::FromBytesAndTimeDelta(
       saturator_a.bytes_transmitted(), end_time - start_time);
-  test::ExpectApproxEq(link.bandwidth(), observed_bandwidth, 0.01f);
+  EXPECT_APPROX_EQ(link.bandwidth(), observed_bandwidth, 0.01f);
 }
 
 // Accepts packets and stores them internally.
@@ -683,15 +683,15 @@
 
   // Ensure we've transmitted the amount of data we expected.
   for (auto* saturator : {&saturator1, &saturator2}) {
-    test::ExpectApproxEq(bandwidth * simulation_time,
-                         saturator->bytes_transmitted(), 0.01f);
+    EXPECT_APPROX_EQ(bandwidth * simulation_time,
+                     saturator->bytes_transmitted(), 0.01f);
   }
 
   // Check that only one direction is throttled.
-  test::ExpectApproxEq(saturator1.bytes_transmitted() / 4,
-                       saturator2.counter()->bytes(), 0.1f);
-  test::ExpectApproxEq(saturator2.bytes_transmitted(),
-                       saturator1.counter()->bytes(), 0.1f);
+  EXPECT_APPROX_EQ(saturator1.bytes_transmitted() / 4,
+                   saturator2.counter()->bytes(), 0.1f);
+  EXPECT_APPROX_EQ(saturator2.bytes_transmitted(),
+                   saturator1.counter()->bytes(), 0.1f);
 }
 
 // Ensure that a larger burst is allowed when the policed saturator exits
@@ -740,14 +740,14 @@
   simulator.RunFor(2 * base_propagation_delay);
 
   // Expect the burst to pass without losses.
-  test::ExpectApproxEq(saturator1.bytes_transmitted(),
-                       saturator2.counter()->bytes(), 0.1f);
+  EXPECT_APPROX_EQ(saturator1.bytes_transmitted(),
+                   saturator2.counter()->bytes(), 0.1f);
 
   // Expect subsequent traffic to be policed.
   saturator1.Resume();
   simulator.RunFor(QuicTime::Delta::FromSeconds(10));
-  test::ExpectApproxEq(saturator1.bytes_transmitted() / 4,
-                       saturator2.counter()->bytes(), 0.1f);
+  EXPECT_APPROX_EQ(saturator1.bytes_transmitted() / 4,
+                   saturator2.counter()->bytes(), 0.1f);
 }
 
 // Test that the packet aggregation support in queues work.