diff --git a/build/config/rust/BUILD.gn b/build/config/rust/BUILD.gn
index b9c4f52..5b9e4c4 100644
--- a/build/config/rust/BUILD.gn
+++ b/build/config/rust/BUILD.gn
@@ -146,7 +146,6 @@
     "//src/connectivity/network/lib/*",
     "//src/connectivity/network/netstack/*",
     "//src/connectivity/network/netstack3/*",
-    "//src/connectivity/network/ping3/*",
     "//src/connectivity/network/testing/netemul/*",
     "//src/connectivity/network/tests/connect/*",
     "//src/connectivity/network/tests/dhcp_interop/*",
diff --git a/src/connectivity/network/ping3/BUILD.gn b/src/connectivity/network/ping3/BUILD.gn
index b964c97..cb536aa 100644
--- a/src/connectivity/network/ping3/BUILD.gn
+++ b/src/connectivity/network/ping3/BUILD.gn
@@ -24,6 +24,7 @@
     "//third_party/rust_crates:anyhow",
     "//third_party/rust_crates:futures",
     "//third_party/rust_crates:log",
+    "//third_party/rust_crates:matches",
     "//third_party/rust_crates:structopt",
     "//third_party/rust_crates:thiserror",
   ]
@@ -45,6 +46,8 @@
     "src/tests/integration_tests.rs",
     "src/tests/mod.rs",
   ]
+
+  configs -= [ "//build/config/rust:allow_unused_results" ]
 }
 
 fuchsia_component("component") {
diff --git a/src/connectivity/network/ping3/src/store.rs b/src/connectivity/network/ping3/src/store.rs
index 0a26853..dc43c3a 100644
--- a/src/connectivity/network/ping3/src/store.rs
+++ b/src/connectivity/network/ping3/src/store.rs
@@ -96,6 +96,7 @@
 mod test {
     use super::*;
 
+    const ZERO_DURATION: zx::Duration = zx::Duration::from_nanos(0);
     const SHORT_DELAY: zx::Duration = zx::Duration::from_nanos(1);
 
     #[test]
@@ -103,7 +104,9 @@
         let _executor = fasync::Executor::new_with_fake_time().expect("Failed to create executor");
         let mut s = SequenceStore::new();
         for i in 0..std::u16::MAX {
-            assert_eq!(s.take().expect("Failed to take").0, i);
+            let (seq, offset) = s.take().expect("Failed to take");
+            assert_eq!(seq, i);
+            assert_eq!(offset, ZERO_DURATION);
         }
     }
 
@@ -112,34 +115,43 @@
         let _executor = fasync::Executor::new_with_fake_time().expect("Failed to create executor");
         let mut s = SequenceStore::new();
         for i in 0..std::u16::MAX {
-            assert_eq!(s.take().expect("Failed to take").0, i);
+            let (seq, offset) = s.take().expect("Failed to take");
+            assert_eq!(seq, i);
+            assert_eq!(offset, ZERO_DURATION);
         }
-        s.take().expect_err("There shouldn't be any more sequence numbers available");
+        matches::assert_matches!(s.take(), Err(OutOfSequencesError {}));
     }
 
     #[test]
     fn give_out_of_order() {
         let _executor = fasync::Executor::new_with_fake_time().expect("Failed to create executor");
         let mut s = SequenceStore::new();
-        s.take().expect("Failed to take");
-        let (n, _) = s.take().expect("Failed to take");
-        s.give(n, None).expect_err("Should error on out-of-order responses");
+        let (seq, offset) = s.take().expect("Failed to take");
+        assert_eq!(seq, 0);
+        assert_eq!(offset, ZERO_DURATION);
+        let (seq, offset) = s.take().expect("Failed to take");
+        assert_eq!(seq, 1);
+        assert_eq!(offset, ZERO_DURATION);
+        matches::assert_matches!(s.give(seq, None), Err(GiveError::OutOfOrder(None)));
     }
 
     #[test]
     fn give_duplicate() {
         let _executor = fasync::Executor::new_with_fake_time().expect("Failed to create executor");
         let mut s = SequenceStore::new();
-        s.give(42, None).expect_err("Should not be able to give seq_nums that haven't been given");
+        matches::assert_matches!(s.give(42, None), Err(GiveError::DoesNotExist(None)));
     }
 
     #[test]
     fn give_same_number() {
         let _executor = fasync::Executor::new_with_fake_time().expect("Failed to create executor");
         let mut s = SequenceStore::new();
-        let (num, _) = s.take().expect("Failed to take");
-        s.give(num, None).expect("Failed to give");
-        s.give(num, None).expect_err("Should not be able to give duplicates");
+        let (seq, offset) = s.take().expect("Failed to take");
+        assert_eq!(seq, 0);
+        assert_eq!(offset, ZERO_DURATION);
+        let latency = s.give(seq, None).expect("Failed to give");
+        assert_eq!(latency, None);
+        matches::assert_matches!(s.give(seq, None), Err(GiveError::Duplicate(None)));
     }
 
     #[test]
@@ -147,8 +159,10 @@
         let _executor = fasync::Executor::new_with_fake_time().expect("Failed to create executor");
         let mut s = SequenceStore::new();
 
-        let (_, a_time) = s.take().expect("Failed to take");
-        let (_, b_time) = s.take().expect("Failed to take");
+        let (seq, a_time) = s.take().expect("Failed to take");
+        assert_eq!(seq, 0);
+        let (seq, b_time) = s.take().expect("Failed to take");
+        assert_eq!(seq, 1);
         assert_eq!(a_time, b_time);
     }
 
@@ -157,9 +171,11 @@
         let executor = fasync::Executor::new_with_fake_time().expect("Failed to create executor");
         let mut s = SequenceStore::new();
 
-        let (_, a_time) = s.take().expect("Failed to take");
+        let (seq, a_time) = s.take().expect("Failed to take");
+        assert_eq!(seq, 0);
         executor.set_fake_time(executor.now() + SHORT_DELAY);
-        let (_, b_time) = s.take().expect("Failed to take");
+        let (seq, b_time) = s.take().expect("Failed to take");
+        assert_eq!(seq, 1);
         assert_eq!(b_time - a_time, SHORT_DELAY);
     }
 
