Starting testing

This commit is contained in:
Melefo
2020-02-05 16:15:21 +01:00
parent 4bb0310dca
commit bc65afb405
11 changed files with 90 additions and 18 deletions

View File

@@ -10,8 +10,8 @@ add_compile_options(-W -Wall -Wextra -Wshadow)
# make unit tests
add_executable(unit_tests
tests/testCPU.cpp
sources/PPU/PPU.cpp
sources/PPU/PPU.hpp
tests/testMemoryBus.cpp
tests/communism.hpp
sources/SNES.cpp
sources/SNES.hpp
sources/Memory/MemoryBus.cpp
@@ -39,9 +39,14 @@ add_executable(unit_tests
sources/Memory/IRectangleMemory.hpp
sources/APU/DSP/DSP.cpp
sources/APU/DSP/DSP.hpp
sources/Renderer/IRenderer.hpp
sources/Renderer/NoRenderer.hpp
sources/Renderer/NoRenderer.cpp
sources/Exceptions/InvalidAction.hpp
sources/Cartridge/InterruptVectors.hpp
sources/Memory/RectangleShadow.cpp
sources/Memory/RectangleShadow.hpp
sources/Renderer/NoRenderer.cpp sources/Renderer/NoRenderer.hpp)
)
# include criterion & coverage
target_link_libraries(unit_tests criterion -lgcov)

View File

@@ -93,7 +93,7 @@ $(function() {
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; std::shared_ptr&lt;IMemory&gt; <a class="code" href="classComSquare_1_1Memory_1_1MemoryBus.html#a1b7ba0ca63589d971404e1b7031f26c1">getAccessor</a>(<a class="code" href="Ints_8hpp.html#a89f009aaf5d1964a000f44f09fa0bcf8">uint24_t</a> addr);</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
<div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="classComSquare_1_1Memory_1_1MemoryBus.html#ab55064b581ef9348bc47e0f277a0439d"> 31</a></span>&#160; uint8_t <a class="code" href="classComSquare_1_1Memory_1_1MemoryBus.html#ab55064b581ef9348bc47e0f277a0439d">_openbus</a> = 0;</div>
<div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="classComSquare_1_1Memory_1_1MemoryBus.html#ab55064b581ef9348bc47e0f277a0439d"> 31</a></span>&#160; uint8_t <a class="code" href="classComSquare_1_1Memory_1_1MemoryBus.html#ab55064b581ef9348bc47e0f277a0439d">_openBus</a> = 0;</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classComSquare_1_1Memory_1_1MemoryBus.html#afa5f49e6918eb466bc9116f042c7c636">_mirrorComponents</a>(<a class="code" href="structComSquare_1_1SNES.html">SNES</a> &amp;console, <span class="keywordtype">int</span> i);</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; </div>
@@ -117,7 +117,7 @@ $(function() {
<div class="ttc" id="aInts_8hpp_html_a89f009aaf5d1964a000f44f09fa0bcf8"><div class="ttname"><a href="Ints_8hpp.html#a89f009aaf5d1964a000f44f09fa0bcf8">uint24_t</a></div><div class="ttdeci">unsigned uint24_t</div><div class="ttdef"><b>Definition:</b> Ints.hpp:8</div></div>
<div class="ttc" id="aclassComSquare_1_1Memory_1_1MemoryBus_html_a1387b77513d9e0d077291477faab46cd"><div class="ttname"><a href="classComSquare_1_1Memory_1_1MemoryBus.html#a1387b77513d9e0d077291477faab46cd">ComSquare::Memory::MemoryBus::write</a></div><div class="ttdeci">void write(uint24_t addr, uint8_t data)</div><div class="ttdoc">Write a data to a global address.</div><div class="ttdef"><b>Definition:</b> MemoryBus.cpp:37</div></div>
<div class="ttc" id="aclassComSquare_1_1Memory_1_1MemoryBus_html_a1b7ba0ca63589d971404e1b7031f26c1"><div class="ttname"><a href="classComSquare_1_1Memory_1_1MemoryBus.html#a1b7ba0ca63589d971404e1b7031f26c1">ComSquare::Memory::MemoryBus::getAccessor</a></div><div class="ttdeci">std::shared_ptr&lt; IMemory &gt; getAccessor(uint24_t addr)</div><div class="ttdoc">Helper function to get the components that is responsible of read/write at an address.</div><div class="ttdef"><b>Definition:</b> MemoryBus.cpp:13</div></div>
<div class="ttc" id="aclassComSquare_1_1Memory_1_1MemoryBus_html_ab55064b581ef9348bc47e0f277a0439d"><div class="ttname"><a href="classComSquare_1_1Memory_1_1MemoryBus.html#ab55064b581ef9348bc47e0f277a0439d">ComSquare::Memory::MemoryBus::_openbus</a></div><div class="ttdeci">uint8_t _openbus</div><div class="ttdoc">The last value read via the memory bus.</div><div class="ttdef"><b>Definition:</b> MemoryBus.hpp:31</div></div>
<div class="ttc" id="aclassComSquare_1_1Memory_1_1MemoryBus_html_ab55064b581ef9348bc47e0f277a0439d"><div class="ttname"><a href="classComSquare_1_1Memory_1_1MemoryBus.html#ab55064b581ef9348bc47e0f277a0439d">ComSquare::Memory::MemoryBus::_openBus</a></div><div class="ttdeci">uint8_t _openBus</div><div class="ttdoc">The last value read via the memory bus.</div><div class="ttdef"><b>Definition:</b> MemoryBus.hpp:31</div></div>
<div class="ttc" id="aclassComSquare_1_1Memory_1_1MemoryBus_html_a21e37ae17ad577a34af5ba49fbdf7180"><div class="ttname"><a href="classComSquare_1_1Memory_1_1MemoryBus.html#a21e37ae17ad577a34af5ba49fbdf7180">ComSquare::Memory::MemoryBus::mapComponents</a></div><div class="ttdeci">void mapComponents(SNES &amp;console)</div><div class="ttdoc">Map components to the address space using the currently loaded cartridge to set the right mapping mod...</div><div class="ttdef"><b>Definition:</b> MemoryBus.cpp:56</div></div>
<div class="ttc" id="aIMemory_8hpp_html"><div class="ttname"><a href="IMemory_8hpp.html">IMemory.hpp</a></div></div>
<div class="ttc" id="aclassComSquare_1_1Memory_1_1MemoryBus_html_afa5f49e6918eb466bc9116f042c7c636"><div class="ttname"><a href="classComSquare_1_1Memory_1_1MemoryBus.html#afa5f49e6918eb466bc9116f042c7c636">ComSquare::Memory::MemoryBus::_mirrorComponents</a></div><div class="ttdeci">void _mirrorComponents(SNES &amp;console, int i)</div><div class="ttdoc">WRam, CPU, PPU &amp; ALU registers are mirrored to all banks of Q1 &amp; Q3. This function is used for the mi...</div><div class="ttdef"><b>Definition:</b> MemoryBus.cpp:48</div></div>

View File

@@ -74,7 +74,7 @@ $(function() {
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classComSquare_1_1Memory_1_1MemoryBus.html#a2c2385dddba2ec8f143f2d88a58a9431">_memoryAccessors</a></td><td class="entry"><a class="el" href="classComSquare_1_1Memory_1_1MemoryBus.html">ComSquare::Memory::MemoryBus</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr><td class="entry"><a class="el" href="classComSquare_1_1Memory_1_1MemoryBus.html#afa5f49e6918eb466bc9116f042c7c636">_mirrorComponents</a>(SNES &amp;console, int i)</td><td class="entry"><a class="el" href="classComSquare_1_1Memory_1_1MemoryBus.html">ComSquare::Memory::MemoryBus</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">private</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classComSquare_1_1Memory_1_1MemoryBus.html#ab55064b581ef9348bc47e0f277a0439d">_openbus</a></td><td class="entry"><a class="el" href="classComSquare_1_1Memory_1_1MemoryBus.html">ComSquare::Memory::MemoryBus</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classComSquare_1_1Memory_1_1MemoryBus.html#ab55064b581ef9348bc47e0f277a0439d">_openBus</a></td><td class="entry"><a class="el" href="classComSquare_1_1Memory_1_1MemoryBus.html">ComSquare::Memory::MemoryBus</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr><td class="entry"><a class="el" href="classComSquare_1_1Memory_1_1MemoryBus.html#a1b7ba0ca63589d971404e1b7031f26c1">getAccessor</a>(uint24_t addr)</td><td class="entry"><a class="el" href="classComSquare_1_1Memory_1_1MemoryBus.html">ComSquare::Memory::MemoryBus</a></td><td class="entry"><span class="mlabel">private</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classComSquare_1_1Memory_1_1MemoryBus.html#a21e37ae17ad577a34af5ba49fbdf7180">mapComponents</a>(SNES &amp;console)</td><td class="entry"><a class="el" href="classComSquare_1_1Memory_1_1MemoryBus.html">ComSquare::Memory::MemoryBus</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classComSquare_1_1Memory_1_1MemoryBus.html#a66fe80e0dafb6078eabf809b2ecd6dae">read</a>(uint24_t addr)</td><td class="entry"><a class="el" href="classComSquare_1_1Memory_1_1MemoryBus.html">ComSquare::Memory::MemoryBus</a></td><td class="entry"></td></tr>

View File

@@ -114,7 +114,7 @@ Private Attributes</h2></td></tr>
<tr class="memitem:a2c2385dddba2ec8f143f2d88a58a9431"><td class="memItemLeft" align="right" valign="top">std::vector&lt; std::shared_ptr&lt; <a class="el" href="classComSquare_1_1Memory_1_1IMemory.html">IMemory</a> &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classComSquare_1_1Memory_1_1MemoryBus.html#a2c2385dddba2ec8f143f2d88a58a9431">_memoryAccessors</a></td></tr>
<tr class="memdesc:a2c2385dddba2ec8f143f2d88a58a9431"><td class="mdescLeft">&#160;</td><td class="mdescRight">The list of components registered inside the bus. Every components that can read/write to a public address should be in this vector. <a href="classComSquare_1_1Memory_1_1MemoryBus.html#a2c2385dddba2ec8f143f2d88a58a9431">More...</a><br /></td></tr>
<tr class="separator:a2c2385dddba2ec8f143f2d88a58a9431"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab55064b581ef9348bc47e0f277a0439d"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classComSquare_1_1Memory_1_1MemoryBus.html#ab55064b581ef9348bc47e0f277a0439d">_openbus</a> = 0</td></tr>
<tr class="memitem:ab55064b581ef9348bc47e0f277a0439d"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classComSquare_1_1Memory_1_1MemoryBus.html#ab55064b581ef9348bc47e0f277a0439d">_openBus</a> = 0</td></tr>
<tr class="memdesc:ab55064b581ef9348bc47e0f277a0439d"><td class="mdescLeft">&#160;</td><td class="mdescRight">The last value read via the memory bus. <a href="classComSquare_1_1Memory_1_1MemoryBus.html#ab55064b581ef9348bc47e0f277a0439d">More...</a><br /></td></tr>
<tr class="separator:ab55064b581ef9348bc47e0f277a0439d"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
@@ -317,7 +317,7 @@ Private Attributes</h2></td></tr>
</div>
</div>
<a id="ab55064b581ef9348bc47e0f277a0439d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab55064b581ef9348bc47e0f277a0439d">&#9670;&nbsp;</a></span>_openbus</h2>
<h2 class="memtitle"><span class="permalink"><a href="#ab55064b581ef9348bc47e0f277a0439d">&#9670;&nbsp;</a></span>_openBus</h2>
<div class="memitem">
<div class="memproto">
@@ -326,7 +326,7 @@ Private Attributes</h2></td></tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">uint8_t ComSquare::Memory::MemoryBus::_openbus = 0</td>
<td class="memname">uint8_t ComSquare::Memory::MemoryBus::_openBus = 0</td>
</tr>
</table>
</td>

View File

@@ -122,7 +122,7 @@ $(function() {
, <a class="el" href="classComSquare_1_1InvalidAddress.html#abef5292580bf0d3c65d407be0edec912">ComSquare::InvalidAddress</a>
, <a class="el" href="classComSquare_1_1InvalidRomException.html#ae174e316e7eb3a2e73defdeeede8c288">ComSquare::InvalidRomException</a>
</li>
<li>_openbus
<li>_openBus
: <a class="el" href="classComSquare_1_1Memory_1_1MemoryBus.html#ab55064b581ef9348bc47e0f277a0439d">ComSquare::Memory::MemoryBus</a>
</li>
<li>_registers

View File

@@ -110,7 +110,7 @@ $(function() {
, <a class="el" href="classComSquare_1_1InvalidAddress.html#abef5292580bf0d3c65d407be0edec912">ComSquare::InvalidAddress</a>
, <a class="el" href="classComSquare_1_1InvalidRomException.html#ae174e316e7eb3a2e73defdeeede8c288">ComSquare::InvalidRomException</a>
</li>
<li>_openbus
<li>_openBus
: <a class="el" href="classComSquare_1_1Memory_1_1MemoryBus.html#ab55064b581ef9348bc47e0f277a0439d">ComSquare::Memory::MemoryBus</a>
</li>
<li>_registers

View File

@@ -146,9 +146,9 @@ Write a data to a global address.
The list of components registered inside the bus. Every components that can read/write to a public address should be in this vector.
\mbox{\Hypertarget{classComSquare_1_1Memory_1_1MemoryBus_ab55064b581ef9348bc47e0f277a0439d}\label{classComSquare_1_1Memory_1_1MemoryBus_ab55064b581ef9348bc47e0f277a0439d}}
\index{ComSquare::Memory::MemoryBus@{ComSquare::Memory::MemoryBus}!\_openbus@{\_openbus}}
\index{\_openbus@{\_openbus}!ComSquare::Memory::MemoryBus@{ComSquare::Memory::MemoryBus}}
\doxysubsubsection{\texorpdfstring{\_openbus}{\_openbus}}
\index{ComSquare::Memory::MemoryBus@{ComSquare::Memory::MemoryBus}!\_openBus@{\_openBus}}
\index{\_openBus@{\_openBus}!ComSquare::Memory::MemoryBus@{ComSquare::Memory::MemoryBus}}
\doxysubsubsection{\texorpdfstring{\_openBus}{\_openBus}}
{\footnotesize\ttfamily uint8\+\_\+t Com\+Square\+::\+Memory\+::\+Memory\+Bus\+::\+\_\+openbus = 0\hspace{0.3cm}{\ttfamily [private]}}

View File

@@ -28,10 +28,10 @@ namespace ComSquare::Memory
if (!handler) {
std::cout << "Unknown memory accessor for address " << std::hex << addr << ". Using open bus." << std::endl;
return this->_openbus;
return this->_openBus;
}
uint8_t data = handler->read(addr - handler->getStart());
this->_openbus = data;
this->_openBus = data;
return data;
}

View File

@@ -28,9 +28,9 @@ namespace ComSquare
std::shared_ptr<IMemory> getAccessor(uint24_t addr);
//! @brief The last value read via the memory bus.
uint8_t _openbus = 0;
uint8_t _openBus = 0;
//! @brief WRam, CPU, PPU & ALU registers are mirrored to all banks of Q1 & Q3. This function is used for the mirroring.
//! @brief WRam, CPU, PPU & APU registers are mirrored to all banks of Q1 & Q3. This function is used for the mirroring.
//! @param console All the components.
//! @param i Base address for the mirrors.
inline void _mirrorComponents(SNES &console, int i);

12
tests/communism.hpp Normal file
View File

@@ -0,0 +1,12 @@
//
// Created by Melefp on 05/02/2020.
//
#ifndef COMSQUARE_COMMUNISM_HPP
#define COMSQUARE_COMMUNISM_HPP
#define private public
#define protected public
#define class struct
#endif //COMSQUARE_COMMUNISM_HPP

55
tests/testMemoryBus.cpp Normal file
View File

@@ -0,0 +1,55 @@
//
// Created by Melefo on 05/02/2020.
//
#include <criterion/criterion.h>
#include "communism.hpp"
#include "../sources/Memory/MemoryBus.hpp"
#include "../sources/Memory/IMemory.hpp"
#include "../sources/SNES.hpp"
#include "../sources/Renderer/NoRenderer.hpp"
using namespace ComSquare;
std::pair<Memory::MemoryBus, SNES> Init()
{
Memory::MemoryBus bus;
Renderer::NoRenderer norenderer(0, 0, 0);
SNES snes(std::make_shared<Memory::MemoryBus>(bus), "", norenderer);
snes.cartridge->_size = 10;
snes.cartridge->_data = new uint8_t[snes.cartridge->_size];
snes.cartridge->header.mappingMode = Cartridge::LoRom;
bus.mapComponents(snes);
return std::make_pair(bus, snes);
}
Test(BusAccessor, GetRom)
{
auto pair = Init();
std::shared_ptr<Memory::IMemory> accessor = nullptr;
accessor = pair.first.getAccessor(0xFFFFEF);
printf("%p %p", accessor.get(), pair.second.cartridge.get());
cr_assert_eq(accessor.get(), pair.second.cartridge.get());
}
Test(BusWrite, )
{
}
Test(BusRead, )
{
}
Test(BusMapping, )
{
}
Test(BusMirror, )
{
}