diff --git a/src/unittest/trietest.cc b/src/unittest/trietest.cc
index ed8a772..7abef4c 100644
--- a/src/unittest/trietest.cc
+++ b/src/unittest/trietest.cc
@@ -28,7 +28,6 @@
  * Authors: Gabe Black
  */
 
-#include <cassert>
 #include <iostream>
 
 #include "base/cprintf.hh"
@@ -40,6 +39,15 @@
 
 typedef Trie<Addr, uint32_t> TestTrie;
 
+namespace {
+
+static inline uint32_t *ptr(uintptr_t val)
+{
+    return (uint32_t *)val;
+}
+
+} // anonymous namespace
+
 int
 main()
 {
@@ -50,78 +58,78 @@
     cprintf("\n\n");
 
     setCase("A single entry.");
-    trie1.insert(0x0123456789abcdef, 40, (uint32_t *)(uintptr_t)(1));
+    trie1.insert(0x0123456789abcdef, 40, ptr(1));
     trie1.dump("One entry");
     cprintf("\n\n");
 
     setCase("Two entries, one on the way to the other.");
     TestTrie trie2;
-    trie2.insert(0x0123456789abcdef, 40, (uint32_t *)(uintptr_t)(1));
-    trie2.insert(0x0123456789abcdef, 36, (uint32_t *)(uintptr_t)(2));
+    trie2.insert(0x0123456789abcdef, 40, ptr(1));
+    trie2.insert(0x0123456789abcdef, 36, ptr(2));
     trie2.dump("Two entries inline v1");
     cprintf("\n\n");
 
     TestTrie trie3;
-    trie3.insert(0x0123456789abcdef, 36, (uint32_t *)(uintptr_t)(2));
-    trie3.insert(0x0123456789abcdef, 40, (uint32_t *)(uintptr_t)(1));
+    trie3.insert(0x0123456789abcdef, 36, ptr(2));
+    trie3.insert(0x0123456789abcdef, 40, ptr(1));
     trie3.dump("Two entries inline v2");
     cprintf("\n\n");
 
     setCase("Two entries on different paths.");
     TestTrie trie4;
-    trie4.insert(0x0123456789abcdef, 40, (uint32_t *)(uintptr_t)(2));
-    trie4.insert(0x0123456776543210, 40, (uint32_t *)(uintptr_t)(1));
+    trie4.insert(0x0123456789abcdef, 40, ptr(2));
+    trie4.insert(0x0123456776543210, 40, ptr(1));
     trie4.dump("Two split entries");
     cprintf("\n\n");
 
     setCase("Skipping past an entry but not two.");
     TestTrie trie5;
-    trie5.insert(0x0123456789000000, 40, (uint32_t *)(uintptr_t)(4));
-    trie5.insert(0x0123000000000000, 40, (uint32_t *)(uintptr_t)(1));
-    trie5.insert(0x0123456780000000, 40, (uint32_t *)(uintptr_t)(3));
-    trie5.insert(0x0123456700000000, 40, (uint32_t *)(uintptr_t)(2));
+    trie5.insert(0x0123456789000000, 40, ptr(4));
+    trie5.insert(0x0123000000000000, 40, ptr(1));
+    trie5.insert(0x0123456780000000, 40, ptr(3));
+    trie5.insert(0x0123456700000000, 40, ptr(2));
     trie5.dump("Complex insertion");
     cprintf("\n\n");
 
     setCase("Looking things up.");
-    EXPECT_EQ((uintptr_t)trie5.lookup(0x0123000000000000), 1);
-    EXPECT_EQ((uintptr_t)trie5.lookup(0x0123456700000000), 2);
-    EXPECT_EQ((uintptr_t)trie5.lookup(0x0123456780000000), 3);
-    EXPECT_EQ((uintptr_t)trie5.lookup(0x0123456789000000), 4);
+    EXPECT_EQ(trie5.lookup(0x0123000000000000), ptr(1));
+    EXPECT_EQ(trie5.lookup(0x0123456700000000), ptr(2));
+    EXPECT_EQ(trie5.lookup(0x0123456780000000), ptr(3));
+    EXPECT_EQ(trie5.lookup(0x0123456789000000), ptr(4));
 
     setCase("Removing entries.");
     TestTrie trie6;
     TestTrie::Handle node1, node2;
-    trie6.insert(0x0123456789000000, 40, (uint32_t *)(uintptr_t)(4));
-    trie6.insert(0x0123000000000000, 40, (uint32_t *)(uintptr_t)(1));
-    trie6.insert(0x0123456780000000, 40, (uint32_t *)(uintptr_t)(3));
-    node1 = trie6.insert(0x0123456700000000, 40, (uint32_t *)(uintptr_t)(2));
-    node2 = trie6.insert(0x0123456700000000, 32, (uint32_t *)(uintptr_t)(10));
+    trie6.insert(0x0123456789000000, 40, ptr(4));
+    trie6.insert(0x0123000000000000, 40, ptr(1));
+    trie6.insert(0x0123456780000000, 40, ptr(3));
+    node1 = trie6.insert(0x0123456700000000, 40, ptr(2));
+    node2 = trie6.insert(0x0123456700000000, 32, ptr(10));
     trie6.dump("Fill before removal");
     cprintf("\n\n");
 
-    EXPECT_EQ((uintptr_t)trie6.lookup(0x0123000000000000), 1);
-    EXPECT_EQ((uintptr_t)trie6.lookup(0x0123456700000000), 10);
-    EXPECT_EQ((uintptr_t)trie6.lookup(0x0123456780000000), 10);
-    EXPECT_EQ((uintptr_t)trie6.lookup(0x0123456789000000), 10);
+    EXPECT_EQ(trie6.lookup(0x0123000000000000), ptr(1));
+    EXPECT_EQ(trie6.lookup(0x0123456700000000), ptr(10));
+    EXPECT_EQ(trie6.lookup(0x0123456780000000), ptr(10));
+    EXPECT_EQ(trie6.lookup(0x0123456789000000), ptr(10));
 
     trie6.remove(node2);
     trie6.dump("One node removed");
     cprintf("\n\n");
 
-    EXPECT_EQ((uintptr_t)trie6.lookup(0x0123000000000000), 1);
-    EXPECT_EQ((uintptr_t)trie6.lookup(0x0123456700000000), 2);
-    EXPECT_EQ((uintptr_t)trie6.lookup(0x0123456780000000), 3);
-    EXPECT_EQ((uintptr_t)trie6.lookup(0x0123456789000000), 4);
+    EXPECT_EQ(trie6.lookup(0x0123000000000000), ptr(1));
+    EXPECT_EQ(trie6.lookup(0x0123456700000000), ptr(2));
+    EXPECT_EQ(trie6.lookup(0x0123456780000000), ptr(3));
+    EXPECT_EQ(trie6.lookup(0x0123456789000000), ptr(4));
 
     trie6.remove(node1);
     trie6.dump("Two nodes removed");
     cprintf("\n\n");
 
-    EXPECT_EQ((uintptr_t)trie6.lookup(0x0123000000000000), 1);
+    EXPECT_EQ(trie6.lookup(0x0123000000000000), ptr(1));
     EXPECT_EQ(trie6.lookup(0x0123456700000000), NULL);
-    EXPECT_EQ((uintptr_t)trie6.lookup(0x0123456780000000), 3);
-    EXPECT_EQ((uintptr_t)trie6.lookup(0x0123456789000000), 4);
+    EXPECT_EQ(trie6.lookup(0x0123456780000000), ptr(3));
+    EXPECT_EQ(trie6.lookup(0x0123456789000000), ptr(4));
 
     return UnitTest::printResults();
 }
