Nikos Nikoleris has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/19131

Change subject: base: Extend unit tests for AddrRange
......................................................................

base: Extend unit tests for AddrRange

Change-Id: Ia154c3a17c3c8254a0e3d622568ac34f0d62fc9e
Signed-off-by: Nikos Nikoleris <nikos.nikole...@arm.com>
---
M src/base/addr_range.test.cc
1 file changed, 133 insertions(+), 1 deletion(-)



diff --git a/src/base/addr_range.test.cc b/src/base/addr_range.test.cc
index 9900c6c..2488e94 100644
--- a/src/base/addr_range.test.cc
+++ b/src/base/addr_range.test.cc
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018 ARM Limited
+ * Copyright (c) 2018-2019 ARM Limited
  * All rights reserved
  *
  * The license below extends only to copyright in the software and shall
@@ -89,3 +89,135 @@
     EXPECT_FALSE(r.isSubset(r1));
     EXPECT_FALSE(r.isSubset(r2));
 }
+
+class AddrRangeBase : public testing::Test {
+  protected:
+    static const Addr end = 0x1ffff;
+    static const Addr start = 0x0;
+    static const int intlv_size = 4;
+
+    AddrRange range[intlv_size];
+};
+
+
+class AddrRangeCont : public AddrRangeBase {
+  protected:
+    void SetUp() override
+    {
+        std::vector<Addr> masks = { 0x4100, 0x8200 };
+        for (auto i = 0; i < intlv_size; i++) {
+            range[i] = AddrRange(start, end, masks, i);
+        }
+    }
+
+    int getIndex(Addr addr)
+    {
+        return bits(addr, 15, 14) ^ bits(addr, 9, 8);
+    }
+};
+
+TEST_F(AddrRangeCont, AddrRangeContains)
+{
+    for (Addr addr = start; addr <= end; addr++) {
+        int i = getIndex(addr);
+        ASSERT_TRUE(range[i].contains(addr));
+        for (int j = 1; j < intlv_size; j++) {
+            ASSERT_FALSE(range[(i + j) % intlv_size].contains(addr));
+        }
+    }
+}
+
+TEST_F(AddrRangeCont, AddrRangeGetOffset)
+{
+    Addr offsets[intlv_size] = {0, 0, 0, 0};
+    for (Addr addr = start; addr <= end; addr++) {
+        int i = getIndex(addr);
+        Addr offset = range[i].getOffset(addr);
+        ASSERT_EQ(offsets[i], offset);
+        offsets[i]++;
+    }
+    for (Addr offset: offsets) {
+        ASSERT_EQ(offset, (end - start + 1) / intlv_size);
+    }
+}
+
+
+class AddrRangeContLegacy : public AddrRangeCont {
+  protected:
+    void SetUp() override
+    {
+        // Test interleaved ranges with hashing
+        for (auto i = 0; i < intlv_size; i++) {
+            range[i] = AddrRange(start, end, 9, 15, 2, i);
+        }
+    }
+};
+
+TEST_F(AddrRangeContLegacy, AddrRangeContains)
+{
+    for (Addr addr = start; addr <= end; addr++) {
+        int i = getIndex(addr);
+        ASSERT_TRUE(range[i].contains(addr));
+        for (int j = 1; j < intlv_size; j++) {
+            ASSERT_FALSE(range[(i + j) % intlv_size].contains(addr));
+        }
+    }
+}
+
+TEST_F(AddrRangeContLegacy, AddrRangeGetOffset)
+{
+    Addr offsets[intlv_size] = {0, 0, 0, 0};
+    for (Addr addr = start; addr <= end; addr++) {
+        int i = getIndex(addr);
+        Addr offset = range[i].getOffset(addr);
+        ASSERT_EQ(offsets[i], offset);
+        offsets[i]++;
+    }
+    for (Addr offset: offsets) {
+        ASSERT_EQ(offset, (end - start + 1) / intlv_size);
+    }
+}
+
+
+class AddrRangeArb : public AddrRangeBase {
+  protected:
+    void SetUp() override
+    {
+        std::vector<Addr> masks = { 0x1800, 0x8100 };
+        for (auto i = 0; i < intlv_size; i++) {
+            range[i] = AddrRange(start, end, masks, i);
+        }
+    }
+
+    int getIndex(Addr addr)
+    {
+        return (bits(addr, 11) ^ bits(addr, 12)) |
+            (bits(addr, 8) ^ bits(addr, 15)) << 1;
+    }
+};
+
+TEST_F(AddrRangeArb, AddrRangeContains)
+{
+
+    for (Addr addr = start; addr <= end; addr++) {
+        auto i = getIndex(addr);
+        ASSERT_TRUE(range[i].contains(addr));
+        for (int j = 1; j < intlv_size; j++) {
+            ASSERT_FALSE(range[(i + j) % intlv_size].contains(addr));
+        }
+    }
+}
+
+TEST_F(AddrRangeArb, AddrRangeGetOffset)
+{
+    Addr offsets[intlv_size] = {0, 0, 0, 0};
+    for (Addr addr = start; addr <= end; addr++) {
+        int i = getIndex(addr);
+        Addr offset = range[i].getOffset(addr);
+        ASSERT_EQ(offsets[i], offset) << addr;
+        offsets[i]++;
+    }
+    for (Addr offset: offsets) {
+        ASSERT_EQ(offset, (end - start + 1) / intlv_size);
+    }
+}

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/19131
To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings

Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: Ia154c3a17c3c8254a0e3d622568ac34f0d62fc9e
Gerrit-Change-Number: 19131
Gerrit-PatchSet: 1
Gerrit-Owner: Nikos Nikoleris <nikos.nikole...@arm.com>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to