diff --git a/quic/quartc/test/quartc_data_source_test.cc b/quic/quartc/test/quartc_data_source_test.cc
index a63bbb8..3617162 100644
--- a/quic/quartc/test/quartc_data_source_test.cc
+++ b/quic/quartc/test/quartc_data_source_test.cc
@@ -55,13 +55,13 @@
   source_->SetEnabled(true);
 
   simulator_.RunFor(config.frame_interval);
-  EXPECT_EQ(delegate_.frames().size(), 1);
+  EXPECT_EQ(delegate_.frames().size(), 1u);
 
   simulator_.RunFor(config.frame_interval);
-  EXPECT_EQ(delegate_.frames().size(), 2);
+  EXPECT_EQ(delegate_.frames().size(), 2u);
 
   simulator_.RunFor(config.frame_interval * 20);
-  EXPECT_EQ(delegate_.frames().size(), 22);
+  EXPECT_EQ(delegate_.frames().size(), 22u);
 }
 
 TEST_F(QuartcDataSourceTest, DoesNotProduceFramesUntilEnabled) {
@@ -73,13 +73,13 @@
       QuicBandwidth::FromBytesAndTimeDelta(1000, config.frame_interval));
 
   simulator_.RunFor(config.frame_interval * 20);
-  EXPECT_EQ(delegate_.frames().size(), 0);
+  EXPECT_EQ(delegate_.frames().size(), 0u);
 
   // The first frame is produced immediately (but asynchronously) upon enabling
   // the source.
   source_->SetEnabled(true);
   simulator_.RunFor(QuicTime::Delta::FromMicroseconds(1));
-  EXPECT_EQ(delegate_.frames().size(), 1);
+  EXPECT_EQ(delegate_.frames().size(), 1u);
 }
 
 TEST_F(QuartcDataSourceTest, DisableAndEnable) {
@@ -92,18 +92,18 @@
 
   source_->SetEnabled(true);
   simulator_.RunFor(config.frame_interval * 20);
-  EXPECT_EQ(delegate_.frames().size(), 20);
+  EXPECT_EQ(delegate_.frames().size(), 20u);
 
   // No new frames while the source is disabled.
   source_->SetEnabled(false);
   simulator_.RunFor(config.frame_interval * 20);
-  EXPECT_EQ(delegate_.frames().size(), 20);
+  EXPECT_EQ(delegate_.frames().size(), 20u);
 
   // The first frame is produced immediately (but asynchronously) upon enabling
   // the source.
   source_->SetEnabled(true);
   simulator_.RunFor(QuicTime::Delta::FromMicroseconds(1));
-  ASSERT_EQ(delegate_.frames().size(), 21);
+  ASSERT_EQ(delegate_.frames().size(), 21u);
 
   // The first frame after a pause should be no larger than previous frames.
   EXPECT_EQ(delegate_.frames()[0].payload.size(),
@@ -131,12 +131,12 @@
   // the source.
   source_->SetEnabled(true);
   simulator_.RunFor(QuicTime::Delta::FromMicroseconds(1));
-  EXPECT_EQ(delegate_.frames().size(), 1);
+  EXPECT_EQ(delegate_.frames().size(), 1u);
 
   // Enabling the source again does not re-schedule the alarm.
   source_->SetEnabled(true);
   simulator_.RunFor(QuicTime::Delta::FromMicroseconds(1));
-  EXPECT_EQ(delegate_.frames().size(), 1);
+  EXPECT_EQ(delegate_.frames().size(), 1u);
 
   // The second frame is sent at the expected interval after the first.
   ASSERT_TRUE(
@@ -157,7 +157,7 @@
   source_->SetEnabled(true);
   simulator_.RunFor(config.frame_interval);
 
-  ASSERT_EQ(delegate_.frames().size(), 1);
+  ASSERT_EQ(delegate_.frames().size(), 1u);
   EXPECT_EQ(delegate_.frames()[0].source_id, config.id);
 }
 
@@ -173,7 +173,7 @@
   source_->SetEnabled(true);
   simulator_.RunFor(config.frame_interval);
 
-  ASSERT_EQ(delegate_.frames().size(), 1);
+  ASSERT_EQ(delegate_.frames().size(), 1u);
   EXPECT_EQ(delegate_.frames()[0].payload.size(),
             bytes_per_frame - kDataFrameHeaderSize);
   EXPECT_EQ(delegate_.frames()[0].size, bytes_per_frame);
@@ -193,8 +193,8 @@
   QuicTime start_time = simulator_.GetClock()->Now();
   simulator_.RunFor(config.frame_interval);
 
-  ASSERT_EQ(delegate_.frames().size(), 1);
-  EXPECT_EQ(delegate_.frames()[0].payload.size(), 0);
+  ASSERT_EQ(delegate_.frames().size(), 1u);
+  EXPECT_EQ(delegate_.frames()[0].payload.size(), 0u);
   EXPECT_EQ(delegate_.frames()[0].size, kDataFrameHeaderSize);
 
   // Header fields are still present and parseable.
@@ -214,7 +214,7 @@
 
   simulator_.RunFor(config.frame_interval * 20);
 
-  ASSERT_EQ(delegate_.frames().size(), 20);
+  ASSERT_EQ(delegate_.frames().size(), 20u);
   for (int i = 0; i < 20; ++i) {
     EXPECT_EQ(delegate_.frames()[i].sequence_number, i);
   }
@@ -231,7 +231,7 @@
 
   simulator_.RunFor(config.frame_interval * 20);
 
-  ASSERT_EQ(delegate_.frames().size(), 20);
+  ASSERT_EQ(delegate_.frames().size(), 20u);
   QuicTime first_send_time = delegate_.frames()[0].send_time;
   for (int i = 1; i < 20; ++i) {
     EXPECT_EQ(delegate_.frames()[i].send_time,
@@ -257,7 +257,7 @@
   // The frames produced use min_bandwidth instead of the lower allocation.
   QuicByteCount bytes_per_frame =
       config.min_bandwidth.ToBytesPerPeriod(config.frame_interval);
-  ASSERT_EQ(delegate_.frames().size(), 1);
+  ASSERT_EQ(delegate_.frames().size(), 1u);
   EXPECT_EQ(delegate_.frames()[0].payload.size(),
             bytes_per_frame - kDataFrameHeaderSize);
   EXPECT_EQ(delegate_.frames()[0].size, bytes_per_frame);
@@ -281,7 +281,7 @@
   // The frames produced use max_bandwidth instead of the higher allocation.
   QuicByteCount bytes_per_frame =
       config.max_bandwidth.ToBytesPerPeriod(config.frame_interval);
-  ASSERT_EQ(delegate_.frames().size(), 1);
+  ASSERT_EQ(delegate_.frames().size(), 1u);
   EXPECT_EQ(delegate_.frames()[0].payload.size(),
             bytes_per_frame - kDataFrameHeaderSize);
   EXPECT_EQ(delegate_.frames()[0].size, bytes_per_frame);
@@ -305,7 +305,7 @@
 
   // Since there's enough bandwidth for three frames per interval, that's what
   // the source should generate.
-  EXPECT_EQ(delegate_.frames().size(), 3);
+  EXPECT_EQ(delegate_.frames().size(), 3u);
   int i = 0;
   for (const auto& frame : delegate_.frames()) {
     // Each of the frames should start with a header that can be parsed.
@@ -334,8 +334,8 @@
   QuicTime start_time = simulator_.GetClock()->Now();
   simulator_.RunFor(config.frame_interval);
 
-  ASSERT_GE(delegate_.frames().size(), 1);
-  EXPECT_EQ(delegate_.frames()[0].payload.size(), 0);
+  ASSERT_GE(delegate_.frames().size(), 1u);
+  EXPECT_EQ(delegate_.frames()[0].payload.size(), 0u);
   EXPECT_EQ(delegate_.frames()[0].size, kDataFrameHeaderSize);
 
   // Header fields are still present and parseable.
@@ -359,13 +359,13 @@
   QuicTime start_time = simulator_.GetClock()->Now();
   simulator_.RunFor(config.frame_interval);
 
-  ASSERT_EQ(delegate_.frames().size(), 2);
-  EXPECT_EQ(delegate_.frames()[0].payload.size(), 200 - kDataFrameHeaderSize);
-  EXPECT_EQ(delegate_.frames()[0].size, 200);
+  ASSERT_EQ(delegate_.frames().size(), 2u);
+  EXPECT_EQ(delegate_.frames()[0].payload.size(), 200u - kDataFrameHeaderSize);
+  EXPECT_EQ(delegate_.frames()[0].size, 200u);
 
   // The second frame, using the 1 leftover byte from the first, rounds up to
   // the minimum frame size (just the header and no payload).
-  EXPECT_EQ(delegate_.frames()[1].payload.size(), 0);
+  EXPECT_EQ(delegate_.frames()[1].payload.size(), 0u);
   EXPECT_EQ(delegate_.frames()[1].size, kDataFrameHeaderSize);
 
   // Header fields are still present and parseable.
diff --git a/quic/quartc/test/quartc_peer.cc b/quic/quartc/test/quartc_peer.cc
index 036ba03..3918c33 100644
--- a/quic/quartc/test/quartc_peer.cc
+++ b/quic/quartc/test/quartc_peer.cc
@@ -34,7 +34,7 @@
 IdToSequenceNumberMap QuartcPeer::GetLastSequenceNumbers() const {
   DCHECK_GE(configs_.size(), data_sources_.size());
   IdToSequenceNumberMap out;
-  for (int i = 0; i < data_sources_.size(); ++i) {
+  for (size_t i = 0; i < data_sources_.size(); ++i) {
     out[configs_[i].id] = data_sources_[i]->sequence_number();
   }
   return out;
diff --git a/quic/quartc/test/quartc_peer_test.cc b/quic/quartc/test/quartc_peer_test.cc
index 9f76fe6..513270e 100644
--- a/quic/quartc/test/quartc_peer_test.cc
+++ b/quic/quartc/test/quartc_peer_test.cc
@@ -170,8 +170,8 @@
   // Run long enough for the bandwidth estimate to ramp up.
   simulator_.RunFor(QuicTime::Delta::FromSeconds(10));
 
-  EXPECT_EQ(client_peer_->received_messages().back().frame.size, 100);
-  EXPECT_EQ(server_peer_->received_messages().back().frame.size, 100);
+  EXPECT_EQ(client_peer_->received_messages().back().frame.size, 100u);
+  EXPECT_EQ(server_peer_->received_messages().back().frame.size, 100u);
 }
 
 TEST_F(QuartcPeerTest, MaxFrameSizeSmallerThanFrameHeader) {
@@ -233,8 +233,8 @@
   std::vector<ReceivedMessage> client_messages =
       client_peer_->received_messages();
   std::sort(client_messages.begin(), client_messages.end(), order);
-  for (int i = 0; i < client_messages.size(); ++i) {
-    EXPECT_EQ(client_messages[i].frame.source_id, i + 1);
+  for (size_t i = 0; i < client_messages.size(); ++i) {
+    EXPECT_EQ(client_messages[i].frame.source_id, static_cast<int32_t>(i + 1));
     EXPECT_EQ(client_messages[i].frame.sequence_number, 0);
     EXPECT_GE(client_messages[i].frame.send_time, start_time);
     EXPECT_LE(client_messages[i].receive_time, end_time);
@@ -243,8 +243,8 @@
   std::vector<ReceivedMessage> server_messages =
       server_peer_->received_messages();
   std::sort(server_messages.begin(), server_messages.end(), order);
-  for (int i = 0; i < server_messages.size(); ++i) {
-    EXPECT_EQ(server_messages[i].frame.source_id, i + 1);
+  for (size_t i = 0; i < server_messages.size(); ++i) {
+    EXPECT_EQ(server_messages[i].frame.source_id, static_cast<int32_t>(i + 1u));
     EXPECT_EQ(server_messages[i].frame.sequence_number, 0);
     EXPECT_GE(server_messages[i].frame.send_time, start_time);
     EXPECT_LE(server_messages[i].receive_time, end_time);
