tests: Add a ptr helper function trietest.
authorGabe Black <gabeblack@google.com>
Thu, 30 Nov 2017 01:29:22 +0000 (17:29 -0800)
committerGabe Black <gabeblack@google.com>
Mon, 4 Dec 2017 23:09:13 +0000 (23:09 +0000)
This function casts an integer constant into a uint32_t * to make the
actual test lines a bit less verbose.

Change-Id: I9307dfd3d5861ddb9c0f6dcf4b28c846004f0a8d
Reviewed-on: https://gem5-review.googlesource.com/6222
Reviewed-by: Brandon Potter <Brandon.Potter@amd.com>
Maintainer: Gabe Black <gabeblack@google.com>

src/unittest/trietest.cc

index ed8a772fad8bbb66f743e0b82b00a34f219560c8..7abef4ce1b36fbd02f80806dee9cf37cc356123b 100644 (file)
@@ -28,7 +28,6 @@
  * Authors: Gabe Black
  */
 
-#include <cassert>
 #include <iostream>
 
 #include "base/cprintf.hh"
@@ -40,6 +39,15 @@ using UnitTest::setCase;
 
 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 @@ main()
     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();
 }