diff options
author | bd <bdunahu@operationnull.com> | 2025-03-06 00:03:00 -0500 |
---|---|---|
committer | bd <bdunahu@operationnull.com> | 2025-03-06 00:03:00 -0500 |
commit | 20fe698a4074df4abe02f14a1a14481770e90abc (patch) | |
tree | e1d14c2ea93c1a4e6d87f007575e744a472147e0 | |
parent | e296a3a6ab782cb80b7091324b41bb78db6d3906 (diff) |
Storage.view method, some initial tests
-rw-r--r-- | inc/cache.h | 1 | ||||
-rw-r--r-- | inc/dram.h | 1 | ||||
-rw-r--r-- | inc/storage.h | 4 | ||||
-rw-r--r-- | src/storage/cache.cc | 8 | ||||
-rw-r--r-- | src/storage/dram.cc | 9 | ||||
-rw-r--r-- | src/storage/storage.cc | 12 | ||||
-rw-r--r-- | tests/cache.cc | 3 | ||||
-rw-r--r-- | tests/dram.cc | 4 |
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 */ @@ -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; } |