summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbd <bdunahu@operationnull.com>2025-03-06 00:03:00 -0500
committerbd <bdunahu@operationnull.com>2025-03-06 00:03:00 -0500
commit20fe698a4074df4abe02f14a1a14481770e90abc (patch)
treee1d14c2ea93c1a4e6d87f007575e744a472147e0
parente296a3a6ab782cb80b7091324b41bb78db6d3906 (diff)
Storage.view method, some initial tests
-rw-r--r--inc/cache.h1
-rw-r--r--inc/dram.h1
-rw-r--r--inc/storage.h4
-rw-r--r--src/storage/cache.cc8
-rw-r--r--src/storage/dram.cc9
-rw-r--r--src/storage/storage.cc12
-rw-r--r--tests/cache.cc3
-rw-r--r--tests/dram.cc4
8 files changed, 29 insertions, 13 deletions
diff --git a/inc/cache.h b/inc/cache.h
index 101cd6e..4d143aa 100644
--- a/inc/cache.h
+++ b/inc/cache.h
@@ -19,7 +19,6 @@ class Cache : public Storage
Response *write(Accessor accessor, signed int data, int address) override;
Response *read(Accessor accessor, int address) override;
- int **view(int base, int lines) override;
};
#endif /* CACHE_H_INCLUDED */
diff --git a/inc/dram.h b/inc/dram.h
index 41dd7de..6d33534 100644
--- a/inc/dram.h
+++ b/inc/dram.h
@@ -17,7 +17,6 @@ class Dram : public Storage
Response *write(Accessor accessor, signed int data, int address) override;
Response *read(Accessor accessor, int address) override;
- int **view(int base, int lines) override;
};
#endif /* DRAM_H_INCLUDED */
diff --git a/inc/storage.h b/inc/storage.h
index 1e512e2..5ad4f99 100644
--- a/inc/storage.h
+++ b/inc/storage.h
@@ -37,13 +37,13 @@ class Storage
* @return A matrix of data values, where each row is a line and each column
* is a word.
*/
- virtual int **view(int base, int lines) = 0;
+ std::vector<std::array<signed int, 4>> view(int base, int lines);
protected:
/**
* The data currently stored in this level of storage.
*/
- std::vector<std::array<unsigned int, 4>> *data;
+ std::vector<std::array<signed int, 4>> *data;
/**
* A pointer to the next lowest level of storage.
* Used in case of cache misses.
diff --git a/src/storage/cache.cc b/src/storage/cache.cc
index 34bdc5f..a4df820 100644
--- a/src/storage/cache.cc
+++ b/src/storage/cache.cc
@@ -1,8 +1,10 @@
-#include <cache.h>
+#include "cache.h"
+#include "response.h"
+#include <bits/stdc++.h>
Cache::Cache(int lines, Storage *lower, int delay)
{
- this->data = new std::vector<std::array<unsigned int, 4>>;
+ this->data = new std::vector<std::array<signed int, 4>>;
this->data->resize(lines);
this->lower = lower;
this->delay = delay;
@@ -17,5 +19,3 @@ Response *Cache::write(Accessor accessor, signed int data, int address)
}
Response *Cache::read(Accessor accessor, int address) { return nullptr; }
-
-int **Cache::view(int base, int lines) { return nullptr; }
diff --git a/src/storage/dram.cc b/src/storage/dram.cc
index 20858cd..89c7316 100644
--- a/src/storage/dram.cc
+++ b/src/storage/dram.cc
@@ -1,9 +1,10 @@
-#include <dram.h>
-#include <response.h>
+#include "dram.h"
+#include "response.h"
+#include <algorithm>
Dram::Dram(int lines, int delay)
{
- this->data = new std::vector<std::array<unsigned int, 4>>;
+ this->data = new std::vector<std::array<signed int, 4>>;
this->data->resize(lines);
this->delay = delay;
this->lower = nullptr;
@@ -17,5 +18,3 @@ Response *Dram::write(Accessor accessor, signed int data, int address)
}
Response *Dram::read(Accessor accessor, int address) { return nullptr; }
-
-int **Dram::view(int base, int lines) { return nullptr; }
diff --git a/src/storage/storage.cc b/src/storage/storage.cc
new file mode 100644
index 0000000..49d8e7e
--- /dev/null
+++ b/src/storage/storage.cc
@@ -0,0 +1,12 @@
+#include "storage.h"
+#include <algorithm>
+
+std::vector<std::array<signed int, 4>> Storage::view(int base, int lines)
+{
+ base = (base / 4) * 4;
+ std::vector<std::array<signed int, 4>> ret(lines + 1);
+ std::copy(
+ this->data->begin() + base, this->data->begin() + base + lines,
+ ret.begin());
+ return ret;
+}
diff --git a/tests/cache.cc b/tests/cache.cc
index 6580563..3b3787d 100644
--- a/tests/cache.cc
+++ b/tests/cache.cc
@@ -4,5 +4,8 @@
TEST_CASE("Constructor initialize test 1", "[cache]")
{
Cache *c = new Cache(1, nullptr, 4);
+ std::array<signed int, 4> expected = {0, 0, 0, 0};
+ std::array<signed int, 4> actual = c->view(0, 1)[0];
+ CHECK(expected == actual);
delete c;
}
diff --git a/tests/dram.cc b/tests/dram.cc
index 21182f8..8d5d03b 100644
--- a/tests/dram.cc
+++ b/tests/dram.cc
@@ -1,8 +1,12 @@
#include "dram.h"
#include <catch2/catch_test_macros.hpp>
+#include <array>
TEST_CASE("Constructor initialize test 1", "[dram]")
{
Dram *d = new Dram(1, 4);
+ std::array<signed int, 4> expected = {0, 0, 0, 0};
+ std::array<signed int, 4> actual = d->view(0, 1)[0];
+ CHECK(expected == actual);
delete d;
}