From b359faa73b199b4defa42983ba17068d66beaaca Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Wed, 29 Nov 2017 17:29:22 -0800 Subject: [PATCH] tests: Add a ptr helper function trietest. 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 Maintainer: Gabe Black --- src/unittest/trietest.cc | 72 ++++++++++++++++++++++------------------ 1 file 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 #include #include "base/cprintf.hh" @@ -40,6 +39,15 @@ using UnitTest::setCase; typedef Trie 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(); } -- 2.30.2