diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/unittest/trietest.cc | 72 |
1 files changed, 40 insertions, 32 deletions
diff --git a/src/unittest/trietest.cc b/src/unittest/trietest.cc index ed8a772fa..7abef4ce1 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 @@ 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(); } |